我有以下脚本:
#!/bin/bash
ls -1 | while read d
do
[[ -f "$d" ]] && continue
echo $d
cd $d
done
问题是每张cd都说“[路径]:没有这样的文件或目录”,为什么? 文件夹存在,因为我列出了它......
答案 0 :(得分:7)
我在你的代码中看到两个问题:
cd
之后,你就呆在那里。请试试这个:
#!/bin/bash
ls -1 | while read d
do
test -d "$d" || continue
echo $d
(cd $d ; echo "In ${PWD}")
done
答案 1 :(得分:4)
你不应该那样使用ls
。
#!/bin/bash
for d in */
do
[[ ! -d "$d" ]] && continue
echo "$d"
cd "$d"
# do something
cd "$OLDPWD"
done
答案 2 :(得分:0)
问题是您更改了脚本中的工作目录。这意味着第二个cd
将在您在上一个cd
中输入的子目录中执行。
dir=`pwd`
ls -1 | while read d
do
[[ -f "$d" ]] && continue
cd "$dir"
echo $d
cd $d
#....
done
答案 3 :(得分:0)
不知道你想要达到的目标。 你想做某种递归的dict遍历吗?
我愿意这样做:
#!/bin/bash
CWD="$(pwd)" #save starting directory
ls -1 | while read d
do
[[ ! -d "$d" ]] && continue
cd "$d"
echo "Changed to directory" $d
#Now you can do someting in the sub-directory
cd "$CWD" #Change back to old directory
done