我正在尝试编写一个跳转到每个子文件夹的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"
然后我收到错误消息“文件名太长”。
你可以帮帮我吗? - 我不知道如何分隔这个字符串(或写一些更方便的东西)。答案 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