bash:使用文件名列表来连接目录中的匹配文件,并将所有文件保存在新目录中

核糖

我在三个不同的目录中找到大量文件。对于其中的某些文件,另一个目录中存在一个具有相同名称的文件。其他文件仅存在于一个目录中。我想使用bash将三个目录中的所有文件复制到一个新目录中,但是对于具有多个目录中具有相同名称的文件的文件,我想在保存到新目录之前跨目录合并文件内容。

这是我的文件结构的示例:

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 new_dir

for f in path/to/dir*/*.txt; do
    cat "$f" >> "new_dir/${f##*/}"
done

这是带有参数扩展的子字符串删除常用用法,以便仅使用文件的基本名称来构造输出文件名。


或者,您可以使用find命令获取文件并为每个文件执行命令:

find path/to/dir* -type f -name '*.txt' -print0 |\
xargs -0 -n1 sh -c 'cat "$0" >> new_dir/"${0##*/}"'

在上面的命令中,out中的文件名find以零分隔符(-print0保留,并且xargs还接受零分隔列表(-0)。对于每个参数(-n1),将执行以下命令。我们呼吁sh -c 'command'为方便使用子去除里面就有,我们可以访问所提供的参数xargs$0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Bash-根据部分文件名列表检查目录中的文件

Perl,使用带有部分这些文件名的数组来匹配目录中的文件

如何在本地目录中建立文件名列表?

如何使用bash将所有csv文件的前200行保存在目录中?

使用Excel VBA获取文件夹/目录中的文件名列表

格式化目录中的所有XML文件并将其保存在子目录中

使用vim获取目录中的所有文件名

获取目录中所有文件的不带扩展名的文件名列表

如何打开目录中的所有文件并将更改保存在同一文件中?

将目录和子目录中的过滤文件名列表放入数组中

从目录(在共享路径上)获取所有文件,并将它们保存在wordpress uploads文件夹中

根据文件名打开文件夹中的所有文件并重新保存在创建的文件夹目录中

根据文件名模式匹配复制目录中的所有文件

将递增值写入子目录中与文件名匹配的所有文件

使用目录中与列表匹配的文件

Bash:处理目录中的所有文件

如何遍历目录中的所有文件,运行脚本并将其写入其他目录中的匹配文件

如何覆盖npy文件并将其保存在目录中?

通过文件名列表循环并通过变量/数组进行迭代,并使用bash从文件名中删除所有字符串

如何编写批处理文件以裁剪目录中的所有pdf文件并将其存储在新目录中?

如何从目录中的所有文件名中删除“ _”

如何使用bash查找目录中的所有文件路径

删除目录中名称与文件列表中的一行不匹配的所有文件

将文件名列在列表中,从当前目录中选择、复制和粘贴文件到特定目录

如何在C中按日期从目录中打印文件名列表?

如何将列表与文件名匹配,然后将匹配的文件移动到 Python 中的新目录?

如何根据最新时间列出目录中的文件并遍历该文件列表并将其保存在数组中以进行模式匹配

使用Powershell从目录中的列表中搜索文件名

将目录中的所有文件名放入数组