Linux列表循环问题
我正在使用find命令创建文件列表。我的问题是利用它的输出,因为谎言和文件夹的语法。find命令返回的示例位于变量$LIST中 如果我跑Linux列表循环问题,linux,list,unix,for-loop,Linux,List,Unix,For Loop,我正在使用find命令创建文件列表。我的问题是利用它的输出,因为谎言和文件夹的语法。find命令返回的示例位于变量$LIST中 如果我跑 IFS=\n echo "$LIST" 我会得到 /C D/e f /C D/t est 所以如果我在for循环中使用这个,比如 for file in $LIST do echo $file echo "File printed" done 我越来越 /C D/e f /C D/t est File Printed 通过将IFS设置为,将输出设
IFS=\n
echo "$LIST"
我会得到
/C D/e f
/C D/t est
所以如果我在for循环中使用这个,比如
for file in $LIST
do
echo $file
echo "File printed"
done
我越来越
/C D/e f
/C D/t est
File Printed
通过将IFS设置为,将输出设置为单个块\n
我想要和期待的是
/C D/e f
File Printed
/C D/t est
File Printed
到目前为止,使用
find
命令对找到的文件执行操作的最佳方法不是使用for
循环,而是使用-exec
开关:
find . -iname '*.java' -exec cp '{}' /tmp/backup/ ';'
这将从当前目录和向下查找所有与*.java
匹配的文件,然后运行
cp filename /tmp/backup/
每一个都有。您应该查看man
页面中的find
,但需要特别注意的是,如果以结尾;'
则文件将一次处理一个,而如果以'+'
结束,则将同时处理多个文件
另一个选项是xargs
,您确实需要使用-print0
切换到find
,然后使用-0
切换到xargs
,以避免文件名中的空格等问题:
find . -iname '*.java' -print0 | xargs -0 grep 'static'
将在所有
.java
文件中查找static
。要将\n
转义序列解释为换行符,需要使用“$”…”语法:
IFS=$'\n'
或者,您可以使用文字换行符:
IFS='
'
你的问题是什么?我看不出这两种输出有什么不同。有什么问题吗?我编辑Barmar是为了更清楚。对此很抱歉。IFS=$“\n”工作正常。我想我需要复习一下这方面的一些语法。这是我2年来的第一个Linux类,我想它要么使用它,要么丢掉它。