如何将所有无组织的文件复制到一个目录中?(在linux上)

srm*_*ark 1 bash shell

我在一个复杂的文件夹结构中有成千上万的mp3,它位于一个文件夹中.我想把所有的mp3都移到一个没有子文件夹的目录中.我可以想到使用find命令执行此操作的各种方法,但一个问题是重复的文件名.我不想替换文件,因为我经常有同一首歌的多个版本.自动重命名是最好的.我真的不在乎如何重命名文件.

有谁知道一个简单而安全的方法吗?

eph*_*ent 6

您可以在复制后更改a/b/c.mp3路径a - b - c.mp3.这是Bash的解决方案:

find srcdir -name '*.mp3' -printf '%P\n' |
    while read i; do
        j="${i//\// - }"
        cp -v "srcdir/$i" "dstdir/$j"
    done

在没有${//}替换的shell中:

find srcdir -name '*.mp3' -printf '%P\n' |
    sed -e 'p;s:/: - :g' |
    while read i; do
        read j
        cp -v "srcdir/$i" "dstdir/$j"
    done

对于不同的方案,GNU的cpmv可以做的,而不是覆盖编号备份-见-b/ --backup[=CONTROL]在手册页.

find srcdir -name '*.mp3' -exec cp -v --backup=numbered {} dstdir/ \;