在一个名为 的目录下a
有许多子文件夹,我想在其中执行某些操作。对所有人都一样。我执行以下操作,但它仅适用于第一个子目录:
for i in "a/*"
do
#echo $i
cd $i
mkdir test
mv *_no test
touch aaa
cd ..
done
上面的代码我想在a
.
答案1
第一个cd
chdirs 进入第一个目录(两级子目录)。之后你就无法cd
进入第二个,因为你只返回了一个级别,所以你没有回到你开始的地方。但即便如此,您还是在循环一个值:“a/*”。
由于您已经对此进行了引号,因此它不会被扩展。
然而,您忘记了在 周围加上引号$i
,因此它确实在那时作为 的参数进行了扩展cd
。
您的代码还有很多其他问题。
一些改进建议:
for i in a/*/; do
(
cd -- "$i" &&
mkdir -p test || exit
mv -- *_no test
touch aaa
)
done
答案2
使用glob
s 时,应删除引号。如果不是,则glob
s 不会扩展。
所以 :
for i in a/*
答案3
在循环内引用 $i 不会执行任何操作,因为a/*/
它已经扩展为单词。例如如果a/*/
扩展到a/My Documents/,在第一个循环$i = a/My
和第二个循环中$i = Documents/
尝试
find . -maxdepth 1 -type d | while read i; do
(
cd -- "$i" &&
mkdir -p test || exit
mv -- *_no test
touch aaa
)
done