ファイルのリストで何かを繰り返したいのですが。問題のファイルの名前にはスペースが含まれています。
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)
次に、これらの各ファイルをstatしたいと思います。
david@david: echo '
for file in $(ls)
do
stat $file
done' | bash
(複数行のコマンドを記述するために、エコーとパイプを使用します。)
それを行うと、名前にスペースが含まれていないファイルで正しく機能します。しかし、他の...
stat: cannot stat ‘(another’: No such file or directory
stat: cannot stat ‘copy)’: No such file or directory
変更$(ls)に"$(ls)"か$fileに"$file"ない作品。私に何ができる?
編集:
echo '
for files in *
do
stat "$files"
done' | bash
トリックを行います!私はbashを初めて使用するので、できるだけ簡単にしたいので、スペースをエスケープしxargsたり、を使用したり、で解決しread -rたりしても、問題は解決します。
一部の人が尋ねたように:はい、代わりにこれを使用するのstat *は奇妙です。しかし、forループを使用して、bash内の一連のファイル名に同じコマンドを適用する一般的な方法を見つけたかっただけです。そうstatするために立つことができgzip、gpgまたはrm。
stat *ですか?(;-)