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

Linux bash变量中带括号的文件夹名称,linux,bash,directory,Linux,Bash,Directory,所以, 文件夹名称中的括号中有空格: 文件夹\文件夹(2000)\file.srt 文件夹\文件夹(1990)\file.srt 不要在我的脚本中工作。任何人都可以帮我吗?您可以使用find-exec来实现以下目的: find . -name "*.srt" -exec echo "file = {}" \; 输出: file = ./folder/folder (1990)/file.srt file = ./folder/folder (2000)/file.srt 问题是,find(1

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

文件夹\文件夹(2000)\file.srt

文件夹\文件夹(1990)\file.srt


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

您可以使用
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
选项,因为文件由新行分隔,所以每次读取都要读取一个文件)


但是在这种情况下,您将无法得到有效的
xargs(1)
use,在被调用命令的命令行中放置尽可能多的参数。您将一次处理一个文件。

这里不工作,需要循环处理。我用echo作为例子。我的脚本使用iconv。现在谢谢你。我正在使用这个脚本,但在我的结构中不起作用,因为这个()在文件夹名中。@LetterLin我认为问题实际上是空格。尝试以下操作:
files=$(find.-name'*.srt')
读取f;做回显“文件:$f”;还没有。用字体看。我做错了什么?别为我工作。我正在使用这个脚本,但在我的结构中不起作用,因为这个()位于文件夹名中。
find . -type f -name "* *" -print0 | xargs -0 cat
find . -name "*.srt" | while read file
do
    echo "file = ${file}"
done