Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash 如何防止'for'循环解析空间?_Bash_Recursion - Fatal编程技术网

Bash 如何防止'for'循环解析空间?

Bash 如何防止'for'循环解析空间?,bash,recursion,Bash,Recursion,我有这个命令去每个目录,一旦有了,在每个文件上运行一些命令: STDIR=$PWD; for dir in $(find . -type d 2>&-); do cd "$dir"; for file in $(find * -prune -type f 2>&-); do command "$file"; done; cd "$STDIR"; done 但是,当文件或目录的名称中有空格时,就会出现问题。我怎样

我有这个命令去每个目录,一旦有了,在每个文件上运行一些命令:

STDIR=$PWD;
for dir in $(find . -type d 2>&-); do 
    cd "$dir";
    for file in $(find * -prune -type f 2>&-); do 
        command "$file";
    done; 
    cd "$STDIR"; 
done
但是,当文件或目录的名称中有空格时,就会出现问题。我怎样才能解决这个问题

这种怀疑在试图应用答案时出现

编辑: 一个好的解决方案也出现在。要解决空间问题,请添加

IFS=$'\n'
在上面代码的第一行之后,以及

unset IFS

完成后
我建议将
查找
-exec
一起使用,并避免将
用于


或者将
find
-print0
一起使用,以及将空字符解释为“新行”的程序,如
xargs
-NULL
一起使用
find
-exec
一起使用,并避免对
使用


或者使用
find
-print0
以及一个将空字符解释为“新行”的程序,如
xargs
--NULL
一样,简短的答案是“引用扩展”,但对于您的情况,正确的答案是

find . -type f -execdir command {} \; 

简短的回答是,一如既往,“引用扩展”,但对于您的情况,正确的答案是

find . -type f -execdir command {} \; 
有三种方法:

1) find -exec (see the answer from Sorpigal)
2) find ... | xargs
3) find ... | while read line ; do command "$line" ; done
第三种解决方案有一个优点:您不需要像变体(1)和(2)中那样多的叉子。当您需要处理相当多的行时,它会变得很重要

有三种方法:

1) find -exec (see the answer from Sorpigal)
2) find ... | xargs
3) find ... | while read line ; do command "$line" ; done

第三种解决方案有一个优点:您不需要像变体(1)和(2)中那样多的叉子。当您需要处理相当多的行时,它会变得很重要

通常,由于分词的原因,您不应该对$中的i执行
(命令)
。这里的示例:通常情况下,您不应该对$中的i执行
(命令)
用于分词原因。这里的示例:可能重复的
-execdir
与这些示例不同,因为它从文件所在的目录执行命令,而您的方式需要手动添加额外的
cd
-execdir
与这些示例不同,因为它从文件所在的目录执行命令,而您的方式需要手动添加额外的
cd