Saya ingin melakukan sesuatu berulang kali pada daftar file. File dalam pertanyaan memiliki spasi dalam namanya:
david@david: ls -l
total 32
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha
-rw-rw-r-- 1 david david 0 Mai 8 11:55 haha~
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (3rd copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (4th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (5th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (6th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (7th copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (another copy)
-rw-rw-r-- 1 david david 13 Mai 8 11:55 haha (copy)
Sekarang saya ingin memberi stat pada masing-masing file ini:
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(Saya menggunakan gema dan pipa untuk menulis perintah multi-line.)
Ketika saya melakukan itu, itu berfungsi dengan benar pada file-file yang tidak memiliki spasi di namanya. Tapi yang lain ...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
Mengubah $(ls)ke "$(ls)"atau $fileke "$file"tidak bekerja. Apa yang dapat saya?
Edit:
echo '
for files in *
do
stat "$files"
done' | bash
lakukan triknya! Karena saya baru mengenal bash, saya ingin menjaga hal-hal sesederhana mungkin - jadi tidak ada yang mencoba keluar dari ruang, atau menggunakan xargsatau solusi read -r, meskipun mereka memecahkan masalah.
Seperti beberapa orang bertanya: Ya, menggunakan ini bukan stat *aneh. Tapi saya hanya ingin menemukan cara umum untuk menerapkan perintah yang sama pada banyak nama file di bash, menggunakan for for. Jadi statbisa berdiri untuk gzip, gpgatau rm.
stat *? (;-)