在Ubuntu 14.04上,我有不同子目录但文件名相同的文件。即:
dirA/file01.jpg, dirA/file02.jpg, dirA/file03.jpg
dirB/file01.jpg, dirB/file02.jpg, dirB/file03.jpg
dirC/file01.jpg, dirC/file02.jpg, dirC/file03.jpg
我希望将包含在不同子目录(约200个)中的所有文件(大约1000个)递归复制到一个单独的目录中(/ home / user / temp /)。
由于它们具有相同的文件名,我想将所有1000个单独的文件重命名为文件名,从而使它们成为唯一的,如下所示:
/home/user/temp/dirA-01.jpg,
/home/user/temp/dirA-02.jpg,
/home/user/temp/dirA-03.jpg
/home/user/temp/dirB-01.jpg,
/home/user/temp/dirB-02.jpg,
/home/user/temp/dirB-03.jpg,
/home/user/temp/dirC-01.jpg
/home/user/temp/dirC-02.jpg
/home/user/temp/dirC-03.jpg
所有(1000)文件应存储在同一个最终目录(home / user / temp)中。
我尝试使用ls,然后找到,然后重命名,然后mv,然后cp,列出太多问题。如果我的PERL达到了划痕,我会在一分钟内将其钉上,但是自从我使用它已经15年了......呜咽呜咽...... 任何人都可以帮助一些活泼而不太复杂的东西吗? 非常感谢您的帮助。
答案 0 :(得分:0)
find "$SRC" -name '*.jpg' -exec perl -e'
for (@ARGV) {
$o = $_;
s{^\Q$ENV{SRC}/}{};
s{/file}{-};
$n = "$ENV{DST}/$_";
if (-e $n) {
warn("rename $o to $n: Already exists\n");
} elsif (!rename($o, $n)) {
warn("rename $o to $n: $!\n");
}
}
' {} +
if -e $n
确保您不会意外覆盖任何内容。
$SRC
和$DST
分别是源文件夹和目标文件夹。