所以, 我在文件夹名称中括号用空格:文件夹名称以括号在bash变量
文件夹\文件夹(2000)\ file.srt
文件夹\文件夹(1990)\ file.srt
for file in `find . -name "*.srt"`
do
echo "file = $file";
done
不要在我的脚本中工作。任何人都可以帮助我?
所以, 我在文件夹名称中括号用空格:文件夹名称以括号在bash变量
文件夹\文件夹(2000)\ file.srt
文件夹\文件夹(1990)\ file.srt
for file in `find . -name "*.srt"`
do
echo "file = $file";
done
不要在我的脚本中工作。任何人都可以帮助我?
您可以使用此find -exec
:
find . -name "*.srt" -exec echo "file = {}" \;
输出:
file = ./folder/folder (1990)/file.srt
file = ./folder/folder (2000)/file.srt
的问题是,在由find(1)
产生的文件名的空间越来越穿插成\n
S离开的名字,并且for
命令可以在不区分它们的情况下获取它们。
最好的方法(和一个保存命令)是使用find(1)
与-print0
选项,打印由一个空字符分离的文件名,然后使用xargs
命令与-0
选项,这预计空值作为分隔符。通过这种方式,您可以使用系统可承受的参数来执行命令。例如
find . -type f -name "* *" -print0 | xargs -0 cat
将打印所有文件的名称中有空格的内容。
在您的示例中,您希望对每条数据线执行一些脚本,因此更好的方法是使用read
shell命令,因为(在这种情况下,您不需要-print0
选项,因为文件由换行符分隔,所以你会阅读每读取文件)
find . -name "*.srt" | while read file
do
echo "file = ${file}"
done
但在这种情况下,你会不会得到有效xargs(1)
使用,把尽可能多的参数在被调用命令的命令行可能。您将一次处理每个文件一个文件。
不要为我工作。 [看这里](https://gist.github.com/oe1tkt/e9182b32382f78a41c1a)我使用这个脚本,但在我的结构中不起作用,因为这个()在文件夹名称。 – LetterLin