我正在寻找一个命令行,它可以对两个名称相同但位于不同文件夹的文件进行一些操作。
例如
A
包含文件1.txt
,2.txt
,3.txt
,... B
包含文件1.txt
,2.txt
,3.txt
,... 我想连接两个文件A/1.txt
和B/1.txt
,以及A/2.txt
和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
中的所有文件,如果只匹配名称。
答案 0 :(得分:5)
对于简单的事情,下一个语法可能就足够了:
cat ./**/1.txt
或者你可以简单地写
cat ./{A,B,C}/1.txt
e.g。
$ 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
依旧......
答案 1 :(得分:4)
尝试此操作以获取具有共同名称的文件:
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
答案 2 :(得分:4)
将遍历文件夹A
中的所有文件,如果存在同名B
的文件,则cat
将同时:
for fA in A/*; do
fB=B/${f##*/}
[[ -f $fA && -f $fB ]] && cat "$fA" "$fB"
done
纯bash,当然除了cat
部分。