如何在linux中一次复制多个文件?这些文件的源位置和目标位置在同一目录中
我在一个目录/home/john中找到了一些文件 我想从此目录复制扩展名为*.text的所有文件,并将它们保存为*.text.bkup,再次保存在同一目录中,即/home/john 有没有一个命令可以让我这么做?如何在linux中一次复制多个文件?这些文件的源位置和目标位置在同一目录中,linux,unix,Linux,Unix,我在一个目录/home/john中找到了一些文件 我想从此目录复制扩展名为*.text的所有文件,并将它们保存为*.text.bkup,再次保存在同一目录中,即/home/john 有没有一个命令可以让我这么做? 此外,使用相同的扩展名,是否可以将所有具有多个扩展名(例如*.text和*.doc)的文件分别复制为*.text.bkup和*.doc.bkup(同样在同一目录中)?否,没有单个/简单的命令可以用标准工具实现这一点 但是你可以写一个这样的脚本来帮你 for file in *.text
此外,使用相同的扩展名,是否可以将所有具有多个扩展名(例如*.text和*.doc)的文件分别复制为*.text.bkup和*.doc.bkup(同样在同一目录中)?否,没有单个/简单的命令可以用标准工具实现这一点 但是你可以写一个这样的脚本来帮你
for file in *.text
do
cp -i "${file}" "${file}.bkup"
done
使用
-i
选项,您可以确认每个覆盖操作这最好通过Shell循环完成:
~/tmp$ touch one.text two.text three.doc four.doc
~/tmp$ for FILE in *.text *.doc; do cp ${FILE} ${FILE}.bkup; done
~/tmp$ ls -1
four.doc
four.doc.bkup
one.text
one.text.bkup
three.doc
three.doc.bkup
two.text
two.text.bkup
在上面的代码中,shell获取所有.text和.doc文件,然后逐个循环遍历每个值,将变量文件分配给每个值。“do”和“done”之间的代码块将针对文件的每个值执行,有效地将每个文件复制到filename.bkup。使用find:
find /home/john -iname '*.text' -type f -exec cp \{} \{}.backup \;
我用了一种迂回的方式来实现这一点。它涉及一个Perl脚本,需要额外的步骤 第1步: 将所有文本文件的名称复制到一个文本文件中。
find -maxdepth 1 -type f -name '*.txt' > file_name1.txt
cp file_name1.txt file_name2.txt
paste -d, file_name1.txt file_name2.txt > file_name.txt
第二步:
复制复制的文件。
find -maxdepth 1 -type f -name '*.txt' > file_name1.txt
cp file_name1.txt file_name2.txt
paste -d, file_name1.txt file_name2.txt > file_name.txt
现在在vi编辑器中打开文件_name2.txt并进行简单的字符串替换
%s/.text/.text.backup/g
步骤3:将源文件名和目标文件名合并为一个文件,用逗号分隔。
find -maxdepth 1 -type f -name '*.txt' > file_name1.txt
cp file_name1.txt file_name2.txt
paste -d, file_name1.txt file_name2.txt > file_name.txt
步骤4:运行下面的perl脚本以获得所需的结果
open(FILE1,"<file_name.txt") or die'file doesnt exist'; #opens a file that has source and destination separated beforhand using commas
chomp(@F1_CONTENTS=(<FILE1>)); # copies the content of the file into an array
close FILE1;
while()
{
foreach $f1 (@F1_CONTENTS)
{
@file_name=split(/,/,$f1); # separates the file content based on commas
print "cp $file_name[0] $file_name[1]\n";
system ("cp $file_name[0] $file_name[1]"); # performs the actual copy here
}
last;
}
打开(FILE1),打开*.text*.doc中的文件
,查看第二个问题。