输入每个文件夹并执行命令(bash或awk等)
我一直在寻找最有效的方法来实现这一点,但不知何故,没有一个答案能让我满意(因为我可能没有那么好的方法来实现它们) 这就是我的问题,我需要一个bash脚本,它进入每个文件夹(实际路径)并执行命令。 文件夹的名称共享一些字符,但您不能用简单的规则声明任何内容,因此为了解决这个问题,让我们假设它们都有随机名称 我试着做一些事情,比如:输入每个文件夹并执行命令(bash或awk等),bash,Bash,我一直在寻找最有效的方法来实现这一点,但不知何故,没有一个答案能让我满意(因为我可能没有那么好的方法来实现它们) 这就是我的问题,我需要一个bash脚本,它进入每个文件夹(实际路径)并执行命令。 文件夹的名称共享一些字符,但您不能用简单的规则声明任何内容,因此为了解决这个问题,让我们假设它们都有随机名称 我试着做一些事情,比如: cd main_folder cd subfolder_1_a do something cd .. cd subfolder_2_b do somet
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)
在本部分中更清楚地说明:
在子文件夹_a中,我想执行如下命令:
if a< 5
command
cd ..
cd subfolder_b
if b<10
command
etc
如果a<5
命令
光盘
cd子文件夹
如果b您可以在BASH脚本中尝试一个简单的for循环:
for i in "folder1" "folder2" "folder3"
do
cd "$i"
pwd
done
可能存在一些语法问题,但基本上它所做的是,对于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
试试(sh
,然后也试试bash
)
有一个相关的问题:当当前工作目录中没有目录时,循环将在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
你说你说的是bash,但是你的shebang行(#!/usr/bin/perl-s
)说的有些不同;用$dir做一些事情;完成
够了吗?很抱歉,乔,你完全是对的……忘了这一点……我的错误。如果语句中缺少引号。不,对于主文件夹中的我来说
并没有达到你的预期。它做了什么?我有在CentOS中使用的脚本。。。它只运行一次循环,将i
设置为字符串main\u文件夹
Ah,您是对的。我道歉。我已经更新了我的答案。当作为可执行文件执行时,它应该运行良好。谢谢!我会检查它是否工作正常。但是我需要的最后一部分会发生什么呢。从实际子文件夹的名称中获取一些字符(在我正在生成命令的子文件夹中)。有可能吗?@Nikko:您必须更明确地说明您想要获取的内容以及目录名的模式。到目前为止,我们有:输入子文件夹a执行一些命令#缺少的部分从该文件夹的名称中获取字符“a”。执行一个包含这个字符“a”的命令。接下来,我想对每个我没有得到的子文件夹执行同样的操作。如果目录名为subfolder_XXX
,则dir=${dir#subfolder}
将从dir
变量中删除subfolder
前缀。
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