【问题标题】:How do I batch copy and rename files with same name in different path?如何批量复制和重命名不同路径中同名的文件?
【发布时间】:2016-04-19 08:14:25
【问题描述】:

我有一组文件夹,在每个文件夹中我有几个子文件夹。在每个子文件夹中都有一个名为 result.txt 的文件,我需要将所有 result.txt 复制到其他位置重命名结果文件。

文件夹:

 abc1
 efg1
 doc2
 ghih

子文件夹: 在aaa1

1.abc1.merged
2.abc1.merged
3.abc1.merged
4.abc1.merged

efg1

1.efg1.merged
2.efg1.merged
3.efg1.merged
4.efg1.merged
5.efg1.merged
...
...

等等 所有子文件夹都在一个不同的文件夹中包含 result.txt,所有结果文件都重命名为 result1.txt、result2.txt 等。

我尝试将子文件夹的名称设置为shell脚本中的变量,并循环进入子文件夹并将result.txt复制到其他路径并通过mv命令重命名。但只有结果一个子目录中的 .txt 文件,每个都被复制而不是全部。

我尝试了以下命令:

cp  $folder/$subfolder/resu*txt ../tsv/$newfolder/

(我之前分配了变量)

mv  ../tsv/$newfolder/resu*txt ../tsv/$newfolder/results$tts.txt

(我将 $tts 定义为文件夹中的子文件夹数)

这仅从每个父文件夹的第一个子文件夹中复制了 result.txt。

【问题讨论】:

标签: shell unix scripting file-handling


【解决方案1】:

我想说的是:

i=1
for dir in **/*;  # loop through files
do
    cp "$dir"/result.txt $your_path/result$i.txt
    ((i++))       # increment variable $i
done

语法**/* 遍历所有子目录。

测试

$ mkdir a
$ cd a
$ mkdir a{1..4}
$ mkdir a{1..4}/a{1..4}
$ for f in **/*; do echo "$f --"; done

最后一条命令返回

a1/a1 --
a1/a2 --
...
a4/a4 --

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2022-12-04
    • 2016-04-09
    • 2021-08-21
    相关资源
    最近更新 更多