找到并进入该目录?

找到并进入该目录?

我想在当前路径中的每个目录中执行一些任务,所以我尝试

for DIRECTORY in `find . -type d -maxdepth 1`
do
    cd $DIRECTORY

    #DO STUFF

    cd ..
done

但我收到了一个很长的错误,说没有这样的文件。

updateall.sh: line 5: cd: ./abc No such file or directory

为什么?我尝试过 cd ./abc 并且没有问题。

谢谢

答案1

您需要添加-mindepth 1。否则,您将cd ..在第一次循环重复中从原始基目录退出并最终进入其父目录。

当你试运行表达式时很容易注意到find

$ find . -type d -maxdepth 1
.
./abc

在第一个循环中,您cd .什么也不做,然后cd ..,您无法进入找到的所有其他目录。


如果目录名中的空格没有问题,您可以随时使用绝对路径find $PWD来代替find .,或者将原始路径存储在您可以(但可能不会起作用)的$PWD变量中,而不是。cd$OLDPWDcd -cd ..

答案2

如果您使用 gnu-find,您可以考虑使用 -execdir。它类似于 -exec,但会从目录执行命令。(例如,如果它要填充多行,它可能是一个临时脚本。)

find . -type d -maxdepth 1 -mindepth 1 -execdir dostuff ";" 

使用

for DIRECTORY in `find ...`

容易受到目录名称中的空格和类似内容的影响。

例子:

mkdir "a a"
echo "123" > a 

for f in $(find . -mindepth 1 -type d); do echo "using $f"; ls -l $f ; done 
using ./a
-rw-r--r-- 1 stefan stefan 4 2012-01-13 08:15 ./a
using a
-rw-r--r-- 1 stefan stefan 4 2012-01-13 08:15 a

相关内容