我需要复制具有特定扩展名的文件。但问题是有多个文件具有相同的文件名。我不想覆盖它们并存储为文件_1,file_2等副本当我尝试使用unix命令行时文件被覆盖虽然我使用了cp -n。 有什么办法可以使用命令行或perl来完成这项任务吗? 我使用的命令是
找-L。 -name" * .txt" -exec cp -n {} -t~ / destination
答案 0 :(得分:2)
您还可以使用cp --backup=numbered
选项。
答案 1 :(得分:1)
在Perl中(未经测试)
perl -MFile::Copy=cp -e '-e ($n = "~/destination/$_") or cp $_, $n for @ARGV' *.txt
答案 2 :(得分:-1)
下面的perl脚本以递归方式查找文件并复制到目标文件夹中,但如果已存在,则会将文件重命名为filename_1,filename_2
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Spec::Functions qw'catfile';
use File::Copy qw'move';
#use autodie qw'move';
use File::Basename;
my ($filename);# = 'DUMBFILE';
my $origin = '/home/itadmin/FoldersFind/OriginalFolder';
my $destination = '/home/itadmin/FoldersFind/Destination';
mkdir($destination, 0777);
my ($path);
find(\&wanted, $origin);
sub wanted
{
if(-e $origin)
{
if($File::Find::name=~m/\.(txt|html|xml)$/gs)
{
$filename = basename($File::Find::name);
}
}
$path = "$destination/$filename";
my $cnt;
while(-e $path)
{
$cnt++;
$path = catfile $destination, "$filename.$cnt";
}
move($filename, $path);
}
输入:(提取文件可能重复)
/OriginalFolder/<folders1>/*file
/OriginalFolder/<folders2>/*file
输出:(重命名)
/Destination/*file_<count> #/Destination/*file_1
/Destination/*file_<count> #/Destination/*file_2