我正在寻找最有效的方法来做到这一点,但不知何故,答案都不能使我感到不适(因为我可能不太好实施它们)。
所以这是我的问题,我想在bash中输入一个脚本,它输入每个文件夹(在实际路径中)并执行命令。 该文件夹的名称共享一些字符,但你可以用一个简单的规则说明,所以为了解决问题,可以说所有这些都有随机名称。
我试图做类似的事情:
cd main_folder
cd subfolder_1_a
do something
cd ..
cd subfolder_2_b
do something
...
...
cd subfolder_n_z
do something
然后我也想得到如果可能,这个例子中的文件夹名称的一些字符我想得到最后一个字母(a,b ... z)
在这部分中要更清楚:
在subfolder_a里面我想做一个像:
这样的命令if a< 5
command
cd ..
cd subfolder_b
if b<10
command
etc
我需要一些帮助! 谢谢!
答案 0 :(得分:2)
尝试(sh
,因此也bash
)
for dir in */; do
dir=${dir%/}
yourcommand "$dir"
done
有一个相关的问题:当前工作目录中没有目录时,循环将运行一次,dir
设置为*
。在bash中,您可以通过预先shopt -s nullglob
。
编辑:也许这可以帮到你。
for dir in */; do
cd "$dir" # go to subfolder
dir=${dir%/} # remove trailing slash
dir=${dir#subfolder_} # remove "subfolder_" prefix (no error checking)
# now do something inside the subfolder. The suffix following the
# subfolder_ prefix is now stored in the variable "$dir"
cd - # go back to parent folder (more precisely, to last folder in history)
done
答案 1 :(得分:0)
您可以在BASH脚本中尝试一个简单的for循环:
for i in "folder1" "folder2" "folder3"
do
cd "$i"
pwd
done
答案 2 :(得分:0)
可能存在一些语法问题,但基本上它的作用是对于main_folder目录中的每个条目,如果条目是目录(表示文件夹),则运行该命令。
cd /to/your/main_folder
for i in *; do
if [ -d "${i}" ]; then
# do your commands for example move the directory to home
mv "${i}" /home
fi
done