Saya punya dua pertanyaan. Pertama, perintah mana yang mencantumkan file dan direktori, tetapi daftar direktori terlebih dahulu?
Pertanyaan kedua: Saya ingin menyalin daftar file ke direktori tunggal, tetapi menjadikan direktori target nama file pertama dalam perintah.
command-line
shell-script
ls
Elham abbasi
sumber
sumber
ls
memiliki--group-directories-first
saklar.-t
mungkin merupakan opsi hanya-GNU untukcp
itu yang mengambil direktori target eksplisit dan karenanya dapat pergi ke mana saja di baris perintah, termasuk awal.Jawaban:
Punya GNU?
Versi gnu
ls
memiliki--group-directories-first
. Dancp
sudah-t
.Tidak ada GNU?
Pada sistem yang tidak memiliki gnu
ls
, taruhan terbaik Anda adalah dua panggilan berurutanfind
dengan-maxdepth n
/-mindepth n
dan-type t
dengan opsi yang sesuai.Untuk menyalin file, dengan target terlebih dahulu, Anda harus menulis skrip yang menyimpan argumen pertama, lalu menggunakan
shift
, dan menambahkan argumen hingga akhir.Awas!
Jika Anda berencana untuk menggunakan ini bersama-sama - yaitu, mengumpulkan daftar dari
find
atauls
(mungkin dengan menggunakanxargs
) dan meneruskannya kecp
(ataucp
pembungkus), Anda harus mengetahui bahaya apa yang ada di parsing daftar file (pada dasarnya, nama file dapat mengandung karakter seperti baris baru yang dapat mengacaukan skrip Anda). Secara khusus, lihat kefind
's-exec
dan-print0
pilihan danxargs
' s-0
pilihan.Alat alternatif untuk menyalin pohon direktori secara efisien.
Anda mungkin ingin melihat menggunakan
rsync
sebagai gantinya; ini memiliki banyak fungsi yang mungkin membuat pekerjaan Anda lebih mudah.sumber
--group-directories-first
).ls --version
untuk mencari tahu mana yang Anda miliki.Mendaftar direktori pertama untuk non-GNU
ls
:ls -l | sort
Catatan, ini akan mencantumkan semua kumpulan hal-hal aneh lainnya seperti symlink, soket dan pipa juga (tentu saja dikelompokkan dengan tepat), tetapi mengingat hal-hal itu cukup langka yang seharusnya tidak menjadi masalah. Kalau tidak, filternya akan
ls -l | grep '^(-|d)' | sort
sumber
sort -r
.bekerja untuk bash dan zsh
cukup tambahkan alias di ~ / .bashrc atau ~ / .zshrc
Juga jika Anda memiliki ZSH, Anda dapat menggunakan utilitas "k"
cukup instal dengan antigen, dengan meletakkan yang berikut ke ~ / .zshrc
sumber
Untuk
zsh
daftar penyelesaian, Anda dapat mengaturlist-dirs-first
gaya agartrue
direktori ditampilkan terlebih dahulu. Di Anda~/.zshrc
:(di sini berlaku untuk semua widget penyelesaian yang mendukungnya dan untuk semua perintah; Anda dapat membatasi itu jika mau, lihat
zstyle
dokumentasi untuk detailnya)Jika Anda belum melakukannya, pastikan untuk menjalankannya
compinstall
juga untuk mendapatkan daftar lengkap berwarna, dengan deskripsi, dll, dan semua barang lainnya.sumber
Untuk non-GNU, awk dapat memfilter semua bidang lainnya:
ls -l
harus berisi 9 bidangOutputnya terlihat seperti
ls -1
tetapi dengan direktori pertama:Menurut "The Long Format" halaman manual ls, ketika jenis file lain terlibat, urutan output harus:
Fungsi bash yang berguna (taruh di .bash_profile atau .bashrc) Anda:
sumber