Saya mencari sesuatu seperti:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Atau sintaksis yang serupa.
Juga dapat bekerja pada perintah lain yang Anda inginkan untuk konfirmasi individual.
sumber
Saya mencari sesuatu seperti:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Atau sintaksis yang serupa.
Juga dapat bekerja pada perintah lain yang Anda inginkan untuk konfirmasi individual.
Ini melakukan apa yang Anda cari:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Ini menggunakan find
daripada ls
karena, umumnya, parsing ls
output tidak dapat diandalkan . Namun, formulir ini find
akan berfungsi dengan nama file walaupun mengandung baris baru atau karakter sulit lainnya.
Penjelasan
find . -maxdepth 1 -type f -print0
Ini memilih file. Ini dapat dikustomisasi menggunakan banyak opsi find. Opsi print0
memberi tahu find
untuk mencetak nama file dalam daftar yang dipisahkan nol. Ini adalah satu-satunya yang dapat diandalkan untuk mengirimkan daftar nama file.
xargs -L1 -p0 chmod +x
Ini mengambil daftar nama file yang dipisahkan nol yang dihasilkan oleh find
dan menerapkan perintah Anda kepada mereka.
The -L1
pilihan memberitahu xargs
bekerja hanya pada satu nama file pada satu waktu. The -p
pilihan memberitahu xargs
prompt untuk persetujuan sebelum melanjutkan. The -0
pilihan memberitahu xargs
untuk menggunakan karakter null sebagai pembatas antara nama file.
[Aku tidak tahu -p
pilihan untuk xargs
sampai @ kwan menunjukkannya.]
find
perintah POSIX kompatibel dengan menggunakan-exec printf '%s\0' {} +
. Jangan berpikir ada cara untuk membuat semuanya POSIX kompatibel.find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Jadi bekerja dengan-maxdepth 1
sebelum-type f
, sebagai:find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.Anda bisa menggunakannya
xargs
.misalnya:
Opsi
-p
: Beri tahu pengguna apakah akan menjalankan setiap baris perintah dan membaca baris dari terminal. Jalankan saja baris perintah jika responsnya dimulai dengan 'y' atau 'Y'.sumber
xargs -p
sehingga saya akan menyalinnya.ls
.touch "a very long file name
dan tekan enter. Lihat kelanjutan garis dan cukup ketik kutipan penutup dan tekan enter lagi. tadaa, baris baru dalam nama file. Karena malas untuk mengetik ulang nama file yang panjang.