我是Linux新手,我正在寻找合并具有相同名称但来自不同文件夹的文件的命令。像这样:
folder 1, folder l1
folder 1 contains folder 2 and files 1.txt, 2.txt, 3.txt, ...
folder 2 contains files 1.txt, 2.txt, 3.txt, ...
我想合并文件夹1和子文件夹2中的两个文本,然后将它们放入文件夹l1中。
我明白了:
ls ./1 | while read FILE; do
cat ./1/"$FILE" ./1/2/"$FILE" >> ./l1/"$FILE"
done
这个似乎运行良好,合并了两个文件,但是,在文件夹l1中创建了一个新的空文件2,在shell上创建了两个警告消息: cat:./1/2:是一个目录 cat:.1 / 2/2:没有这样的文件或目录
我想知道新文件2和警告消息的解释,更重要的是如何改进命令行或新解决方案因为我有几十个文件夹1。
答案 0 :(得分:1)
您的代码看起来很不错。它正在发出警告,因为您正在尝试合并目录!您可以添加一个检查来跳过目录,如下面的代码:
#!/bin/bash
cd 'folder 1'
for file in *.txt; do
[[ ! -f $file ]] && continue # pick up only regular files
otherfile="folder 2/$file"
[[ ! -f $otherfile ]] && continue # skip if there is no matching file in folder 2
cat "$file" "$otherfile" > "folder l1/$file.merged"
done
引用上面的变量以防止word splitting。
非常重要