带有bash变量括号的文件夹名称

时间:2017-07-21 15:01:06

标签: linux bash directory

所以, 我在带有空格的文件夹名称中有括号:

folder \ folder(2000)\ file.srt

folder \ folder(1990)\ file.srt

for file in `find . -name "*.srt"`
do
 echo "file = $file";
done

不要在我的脚本中工作。任何人都可以帮助我?

2 个答案:

答案 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)使用,尽可能多地在被调用命令的命令行中放置参数。您一次只能处理一个文件。