使用 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
我正在尝试编写一个 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