使用 bash 跳转到每个子文件夹并再次返回

Jump into each subfolder and back again with bash

我正在尝试编写一个 bash 脚本,该脚本跳转到每个子文件夹,然后跳回到主文件夹(依此类推...)。困难是有空格的路径名。

 for path in "`find -type d | tr -d './'`"
 do 
    echo "Next Pathname: $path"        
    cd $path   
    echo "I'm in path $pathr"
 cd ..
 done

错误消息是 "filename or path not found"。当我改变

 cd $path 

 "cd $path" 

然后我收到错误消息 "filename too long"。

你能帮帮我吗? - 我不知道如何分隔这个字符串(或者写一些更方便的东西)。

问题是find只能输出一个字节流,所以你必须小心让它输出一些你可以无损分割的东西。文件路径中唯一不允许出现的字符是 ASCII NUL,所以让我们使用它:

while IFS= read -r -d '' path
do
  ( # <-- subshell avoids having to "cd back" afterwards
    if cd "$path"
    then
      echo "I'm in $path"
    else
      echo "$path is inaccessible"
    fi
  )
done <  <(find . -type d -print0)

它处理各种文件名:

$ mkdir "dir with spaces" "dir with *" $'dir with line\nfeed'

$ ls -l
total 12
drwxr-x--- 2 me me 4096 Feb  2 13:59 dir with *
drwxr-x--- 2 me me 4096 Feb  2 13:59 dir with line?feed
drwxr-x--- 2 me me 4096 Feb  2 13:59 dir with spaces
-rw-r----- 1 me me  221 Feb  2 13:59 script

$ bash script
I'm in .
I'm in ./dir with spaces
I'm in ./dir with *
I'm in ./dir with line
feed