bash:使用文件名列表跨目录连接匹配的文件,并将所有文件保存在新目录中
我在三个不同的目录中找到了大量文件。对于其中一些文件,另一个目录中存在具有相同名称的文件。其他文件仅存在于一个目录中。我希望使用bash将三个目录中的所有文件复制到一个新目录中,但是对于多个目录中具有相同名称文件的文件,我希望在保存到新目录之前跨目录连接文件内容 下面是我的文件结构的示例:bash:使用文件名列表跨目录连接匹配的文件,并将所有文件保存在新目录中,bash,cat,Bash,Cat,我在三个不同的目录中找到了大量文件。对于其中一些文件,另一个目录中存在具有相同名称的文件。其他文件仅存在于一个目录中。我希望使用bash将三个目录中的所有文件复制到一个新目录中,但是对于多个目录中具有相同名称文件的文件,我希望在保存到新目录之前跨目录连接文件内容 下面是我的文件结构的示例: ls dir1/ file1.txt file2.txt file4.txt ls dir2/ file2.txt file5.txt file6.txt file9.txt ls dir3/ file2
ls dir1/
file1.txt
file2.txt
file4.txt
ls dir2/
file2.txt
file5.txt
file6.txt
file9.txt
ls dir3/
file2.txt
file3.txt
file4.txt
file7.txt
file8.txt
file10.txt
使用这个示例,我想生成一个新目录,其中包含file1.txt到file10.txt,但在新目录中连接了同名文件(例如file2.txt、file4.txt)的内容
我有一个包含在三个目录中的所有文件名的唯一列表(列表中包含每个唯一文件名的单个实例)。到目前为止,我已经找到了从一个目录中获取文件名列表并将这些文件与第二个目录中同名文件连接起来的代码,但我不确定如何使用我的文件名列表作为连接和保存文件的参考(而不是第一个目录中ls的输出)。有没有关于如何修改的想法?非常感谢
PATH1='/path/to/dir1'
PATH2='/path/to/dir2'
PATH3='/path/to/dir3'
mkdir dir_new
ls $PATH1 | while read FILE; do
cat $PATH1/"$FILE" $PATH2/"$FILE" $PATH3/"$FILE" >> ./dir_new/"$FILE"
done
您可以这样做:
mkdir-p新目录
对于路径/to/dir*/*.txt中的f;做
cat“$f”>>“新目录/${f##*/}”
完成
这是一个用于删除带有参数扩展的子字符串的方法,以便仅使用文件的basename来构造输出文件名
或者,您可以使用
find
命令获取文件并对每个文件执行命令:
find path/to/dir*-type f-name'*.txt'-print0|\
xargs-0-n1 sh-c'cat“$0”>>新目录/“${0##*/}”
在上述命令中,find
中的文件名保留为零分隔(-print0
),并且xargs
也接受零分隔列表(-0
)。对于每个参数(-n1
),执行以下命令。我们调用sh-c'command'
为了方便使用其中的子字符串删除,我们可以访问xargs
提供的参数作为$0