Saya memiliki direktori bernama uploads
. Ini berisi banyak file, ditambah beberapa subdirektori yang pada gilirannya berisi file.
Apakah ada cara saya dapat (dalam satu langkah) melakukan hal berikut:
Daftarkan HANYA file dalam direktori unggahan root - Saya tidak ingin melihat nama subfolder atau isinya;
dan
JANGAN daftar file yang dimulai dengan
t_
Saya tahu tentang -d
bendera, tetapi itu tidak membuat saya mendapatkan apa yang saya inginkan.
-exec ls -lG -- {} +
dalam jawabannya untuk mendapatkan output menggunakan opsi tambahan untuk ls. Anda juga dapat menambahkan hanya-ls
ke temuan ini untuk mendapatkan perkiraan cepat dan kotor dari tampilan rinci ls.GNU ls (yaitu perintah ls pada sistem Linux yang tidak tertanam dan Cygwin, juga tersedia di beberapa unit lain) memiliki opsi untuk menyembunyikan beberapa file, berdasarkan namanya. Tidak ada cara untuk mengabaikan direktori.
Pendekatan lain adalah membuat shell Anda melakukan pencocokan. Bash, ksh dan zsh memiliki pola negasi
!(t_*)
untuk mencocokkan semua file kecuali yang cocokt*
; di bash fitur ini perlu dinyalakanshopt -s extglob
, dan di zsh perlu dinyalakansetopt ksh_glob
. Zsh juga memiliki sintaks^t_*
yang setara yang perlu dinyalakansetopt extended_glob
. Ini masih tidak mengabaikan direktori. Zsh memiliki fitur tambahan yang memungkinkan untuk mencocokkan file tidak hanya dengan nama tetapi juga dengan metadata dan lainnya: kualifikasi global . Tambahkan(.)
di akhir pertandingan untuk membatasi ke file biasa. Negasi^
adalah bagian dari sintaksis pencocokan nama, jadi^t_*(.)
artinya “semua file biasa tidak cocokt_*
” dan bukan “semua file yang bukan file biasa cocokt_*
”.Jika Anda menemukan diri Anda tanpa alat canggih, Anda dapat melakukan ini di unix dengan
find
. Ini bukan jenis yang biasanya Anda ketik di baris perintah, tetapi kuat dan tepat. Caleb telah menunjukkan bagaimana melakukan ini dengan GNU find . The-maxdepth
pilihan adalah tidak portabel; Anda dapat menggunakannya-prune
sebagai gantinya, untuk menghentikanfind
pengulangan secara mudah.Ganti
-print
dengan-exec ls -lG -- {} +
untuk mengeksekusils
dengan opsi favorit Anda pada file.Semua perintah di atas menyembunyikan file dot (yaitu file yang namanya dimulai dengan a
.
). Jika Anda ingin menampilkannya, teruskan-A
kels
, atau tambahkanD
kualifikasi glob di zsh (ls uploads/^t_*(.D)
). Denganfind
, Anda dapat menggunakan pendekatan yang berbeda untuk membuatnya hanya muncul satu tingkat (find
tidak memperlakukan file dot secara khusus). Ini hanya berfungsi jika Anda menjalankanfind
di direktori saat ini.sumber
-maxdepth
harus menggunakan , tetapi masalah "portabilitas" mengacu Gilles adalah bahwa BSDfind
(juga ditemukan di OSX saya pikir) adalah hewan yang sedikit berbeda, jadi Anda mungkin perlu jawabannya juga. @Gilles: +1 untuk trik zsh!prune
s muncul di pikiran, tetapi saya akan membiarkannya dengan hanya mengatakan bahwa ketika saya mucking sekitar pada sistem saya sendiri berapa kali pikiran " akan perintah ini bekerja jika saya berada di AIX, Solaris atau MINIX3 "kira-kira ... siaga ... Saya mengalami kesulitan mendapatkan pembacaan meter ... tampilan dibekukan0.00
.ls
punya--use-telepathy
pilihan? Itu cara tercepat untuk hanya menampilkan file yang Anda inginkan. Mungkin tidak portabel.sumber
$9
dalam pernyataan ini?ls
output .print
$ NF` akan lebih baik, IMO. $ NF berarti jumlah bidang, yang akan menjadi 9 dan merupakan penggunaan umum di AWK sebagai kesempatan yang baik untuk mengajar orang lain tentang $ NF.sumber
find
?Biarkan saya mencobanya
ls
dan menggunakan pipa:katakanlah kolom terakhir adalah yang ke-9.
sumber
Jika masalah portabilitas -maxdepth menjadi perhatian, Anda dapat menggunakan:
Saya bukan ahli, tetapi saya pikir ini harus berhasil. Saya kira itu terlihat sedikit samar, tetapi jika Anda berbicara awk, sebenarnya tidak. $ NF bisa digunakan sebagai pengganti $ 9. Anda juga bisa:
yang melakukan hal yang sama (tapi mungkin kurang efisien daripada yang sebelumnya ???).
Sebenarnya, setelah memikirkan postingan lain, sepertinya
adalah cara yang lebih pendek dan lebih jelas.
Seseorang tolong perbaiki saya jika saya salah. :-)
sumber
ls
umumnya bukan ide yang baik . Trik awk Anda akan gagal dengan nama file dengan spasi putih di dalamnya misalnya.Saya menemukan cara-cara singkat ini:
atau
sumber
Coba alias ini dan gunakan:
sumber
ls -hLlF
tidak menunjukkan subdirektori dan itu menunjukkan file dimulai dengant_
. Jadi bagaimana ini menjawab pertanyaan?Peasy mudah:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^d
sumber