跳转到每个子文件夹,然后再用bash返回

时间:2015-02-02 19:52:29

标签: linux bash path subdirectory

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

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

错误消息是“找不到文件名或路径”。当我改变

 cd $path 

 "cd $path" 

然后我收到错误消息“文件名太长”。

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

1 个答案:

答案 0 :(得分:2)

问题是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