循环遍历不同目录下的文件

循环遍历不同目录下的文件

我有一组包含值并存储在多个目录中的文本文件。我需要使用循环来执行命令,以便我可以将命令应用于多个目录中的每个文件。

我想到的代码是

#!/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

相关内容