所以, 我在带有空格的文件夹名称中有括号:
folder \ folder(2000)\ file.srt
folder \ folder(1990)\ file.srt
for file in `find . -name "*.srt"`
do
echo "file = $file";
done
不要在我的脚本中工作。任何人都可以帮助我?
答案 0 :(得分:0)
您可以使用find -exec
:
find . -name "*.srt" -exec echo "file = {}" \;
输出:
file = ./folder/folder (1990)/file.srt
file = ./folder/folder (2000)/file.srt
答案 1 :(得分:0)
问题是find(1)
生成的文件名中的空格散布在由\n
s分隔的名称中,而for
命令可以在不区分它们的情况下获取它们。< / p>
最好的方法(以及保存命令的方法)是使用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)
使用,尽可能多地在被调用命令的命令行中放置参数。您一次只能处理一个文件。