我有一个文件夹 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
...)都有同名的文本文件。
如何将所有文本文件从
Origin
复制到Destination
,但由于所有文件名相同,因此更改名称,包括它们来自的子目录名称?
例如,来自 11
子目录的 1.txt 在 Destination
中将具有名称 1_11_1.txt,来自 23
子目录的 1.txt 将具有 2_23_1.txt 名称。
如何在
Destination
中创建包含所有原始文件名、原始位置和新文件名的 .csv 文件?
您能解释一下您的思考过程吗?您是如何创建这样的 bash 脚本的?
谢谢!
您正在寻找这样的东西:
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
。