以下两篇帖子:
我想做同样的事情,但用复制而不是移动。简单来说,我有一个包含子目录和子子目录的目录,里面有一些文件。我想将所有文件复制到另一个目标文件夹,但由于某些文件具有完全相同的名称,因此我想将父目录的名称作为文件名的前缀附加。
我在 ubuntu 16.04 上运行
答案1
鉴于
$ tree folder1
folder1
├── folder2
│ ├── folder3
│ │ ├── name1.csv
│ │ ├── name2.csv
│ │ └── name3.csv
│ ├── name1.csv
│ ├── name2.csv
│ └── name3.csv
├── name1.csv
├── name2.csv
└── name3.csv
2 directories, 9 files
然后您可以做这样的事情来替换/
原始中的每个路径分隔符(),_
例如:
$ find folder1 -type f -exec bash -c '
for f; do echo cp -n "$f" path/to/newdir/"${f//\//_}"; done
' bash {} +
cp folder1/folder2/folder3/name2.csv path/to/newdir/folder1_folder2_folder3_name2.csv
cp folder1/folder2/folder3/name3.csv path/to/newdir/folder1_folder2_folder3_name3.csv
cp folder1/folder2/folder3/name1.csv path/to/newdir/folder1_folder2_folder3_name1.csv
cp folder1/folder2/name2.csv path/to/newdir/folder1_folder2_name2.csv
cp folder1/folder2/name3.csv path/to/newdir/folder1_folder2_name3.csv
cp folder1/folder2/name1.csv path/to/newdir/folder1_folder2_name1.csv
cp folder1/name2.csv path/to/newdir/folder1_name2.csv
cp folder1/name3.csv path/to/newdir/folder1_name3.csv
cp folder1/name1.csv path/to/newdir/folder1_name1.csv
请注意,如果原始文件或文件夹名称已包含该字符,则这不能保证唯一的命名_
(这就是我包含-n
no-clobber 开关的原因 - 以防万一)。当然,您可以自由选择不同的(或不使用)分隔符。
echo
一旦您确信它正在做正确的事情,就将其删除。