![在 for 循环中迭代文件组](https://linux22.com/image/184939/%E5%9C%A8%20for%20%E5%BE%AA%E7%8E%AF%E4%B8%AD%E8%BF%AD%E4%BB%A3%E6%96%87%E4%BB%B6%E7%BB%84.png)
我有一组这样的文件:
A1.xlsx
A2.xlsx
B1.xlsx
C1.xlsx
C2.xlsx
我只知道前缀(A、B、C),但名称的其余部分事先未知,文件数量也是如此。我需要调用一些命令,向它们传递这些文件组,如下所示:
mycommand A*.xlsx
mv A*.xlsx tmp/
mycommand B*.xlsx
mv B*.xlsx tmp/
mycommand C*.xlsx
mv C*.xlsx tmp/
我已经尝试了不同的循环语法for fileGroup in A* B* C*
,但我只能将文件名一一传递给,或者只对所有文件mycommand
调用一次。 mycommand
bash 中有执行此操作的语法吗?
答案1
假设您知道并且可以对前缀进行硬编码:
for p in A B C D; do
mycommand "$p"*.xlsx
mv "$p"*.xlsx tmp/
...
done
答案2
对所有这些都使用 glob 表达式。对于以A
或B
或开头的文件C
。
<mycommand> [ABC]*.xlsx
mv -t tmp/ -- [ABC]*.xlsx
这里是一本关于全球的好读物。
如果您需要执行不接受许多文件参数的命令,则必须为每个参数调用单独的进程,但您仍然可以使用相同的 glob 选择它们:
for f in [ABC]*.xlsx; do
<some_command> "$f"
done