Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux列表循环问题_Linux_List_Unix_For Loop - Fatal编程技术网

Linux列表循环问题

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设置为,将输出设

我正在使用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设置为,将输出设置为单个块\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类,我想它要么使用它,要么丢掉它。