4

我正在寻找一个命令行,它可以对两个具有相同名称但位于不同文件夹中的文件执行一些操作。

例如,如果

  • 文件夹A包含文件1.txt, 2.txt, 3.txt, ...
  • 文件夹B包含文件1.txt, 2.txt, 3.txt, ...

我想连接这两个文件A/1.txtand B/1.txt, A/2.txtand B/2.txt, ...

我正在寻找一个shell命令来做到这一点:

if file name in A is equal the file name in B then: 
    cat A/1.txt B/1.txt
end if

对于文件夹A和中的所有文件B,如果只有名称匹配。

4

3 回答 3

6

对于简单的事情,下一个语法可能就足够了:

cat ./**/1.txt 

或者你可以简单地写

cat ./{A,B,C}/1.txt

例如

$ mkdir -p A C B/BB
$ touch ./{A,B,B/BB,C}/1.txt
$ touch ./{A,B,C}/2.txt

./A/1.txt
./A/2.txt
./B/1.txt
./B/2.txt
./B/BB/1.txt
./C/1.txt
./C/2.txt

echo ./**/1.txt

返回

./A/1.txt ./B/1.txt ./B/BB/1.txt ./C/1.txt

所以

cat ./**/1.txt

cat使用上述参数运行...或者,

echo ./{A,B,C}/1.txt

将打印

./A/1.txt ./B/1.txt ./C/1.txt #now, without the B/BB/1.txt

等等...

于 2013-06-24T20:11:13.407 回答
5

试试这个来获取具有共同名称的文件:

cd dir1
find . -type f | sort > /tmp/dir1.txt
cd dir2
find . -type f | sort > /tmp/dir2.txt
comm -12 /tmp/dir1.txt /tmp/dir2.txt

然后使用循环来做任何你需要的事情:

for filename in "$(comm -12 /tmp/dir1.txt /tmp/dir2.txt)"; do
    cat "dir1/$filename"
    cat "dir2/$filename"
done
于 2013-06-24T17:18:52.407 回答
4

将遍历文件夹中的所有文件A,如果B存在同名文件,则cat两者都会:

for fA in A/*; do
    fB=B/${f##*/}
    [[ -f $fA && -f $fB ]] && cat "$fA" "$fB"
done

,当然,除了cat部分。

于 2013-06-24T17:37:07.050 回答