![循环遍历不同目录下的文件](https://linux22.com/image/182068/%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%E4%B8%8D%E5%90%8C%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有一组包含值并存储在多个目录中的文本文件。我需要使用循环来执行命令,以便我可以将命令应用于多个目录中的每个文件。
我想到的代码是
#!/bin/bash
#
dir=`pwd`
datapath1=$dir/datafiles1
datapath2-$dir/datafiles2
for file in /$datapath1/*.txt ; do
sort -k1,1rn < "$file"
done > file.cat &&
#
for file in /$datapath2/*.txt ; do
sort -k1,1rn < "$file"
done > file.cat &&
#
显然,对于许多目录来说这是非常困难的。是否有任何简化的方法可以容纳在单个循环中?
答案1
您的脚本有问题:每个循环都会覆盖file.cat
.
如果您在一个循环中循环所有文件,则可以消除该问题并简化脚本。
#!/bin/bash
dir=$(pwd)
datapath1=$dir/datafiles1
datapath2=$dir/datafiles2
for file in "$datapath1"/*.txt "$datapath2"/*.txt; do
sort -k1,1rn < "$file"
done > file.cat
也总是引用你的变量。
正如 Kusalananda 所指出的,如果目录名称非常相似,甚至可以使用 glob 来寻址所有涉及的目录和文件。在给出的例子中,这确实是可能的
sort -k1,1rn "$PWD"/datafiles[12]/*.txt > file.cat