如何复制具有特定扩展名的所有文件并添加子目录名称来重命名它们

问题描述 投票:0回答:1

我有一个文件夹 Bash,其中有两个子目录

Origin
Destination

Origin 有子目录

1
2
3
4
。 它们每个都有自己的子目录。例如,
1
有子目录
11
12
13
等。
2
有子目录
21
22
23

目录

11
有文件1.txt、2.txt、3.txt以及其他扩展名的文件。 目录
12
有不同的.txt文件,但具有相同的名称1.txt,2.txt,3.txt以及其他扩展名的文件。

事实上,每个最终子目录(例如

11
12
13
21
22
...)都有同名的文本文件。

  1. 如何将所有文本文件从

    Origin
    复制到
    Destination
    ,但由于所有文件名相同,因此更改名称,包括它们来自的子目录名称? 例如,来自
    11
    子目录的 1.txt 在
    Destination
    中将具有名称 1_11_1.txt,来自
    23
    子目录的 1.txt 将具有 2_23_1.txt 名称。

  2. 如何在

    Destination
    中创建包含所有原始文件名、原始位置和新文件名的 .csv 文件?

您能解释一下您的思考过程吗?您是如何创建这样的 bash 脚本的?

谢谢!

bash csv file rename
1个回答
0
投票

您正在寻找这样的东西:

find Origin -type f -exec bash -c '
for src; do
  ext=${src#"${src%.*}"}
  dst=${src%"$ext"}
  dst=${dst#*/}
  dst=Destination/${dst//\//_}$ext
  echo mv "$src" "$dst"
done' sh {} +

如果输出看起来不错,请删除

echo

© www.soinside.com 2019 - 2024. All rights reserved.