Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux中一次复制多个文件?这些文件的源位置和目标位置在同一目录中_Linux_Unix - Fatal编程技术网

如何在linux中一次复制多个文件?这些文件的源位置和目标位置在同一目录中

如何在linux中一次复制多个文件?这些文件的源位置和目标位置在同一目录中,linux,unix,Linux,Unix,我在一个目录/home/john中找到了一些文件 我想从此目录复制扩展名为*.text的所有文件,并将它们保存为*.text.bkup,再次保存在同一目录中,即/home/john 有没有一个命令可以让我这么做? 此外,使用相同的扩展名,是否可以将所有具有多个扩展名(例如*.text和*.doc)的文件分别复制为*.text.bkup和*.doc.bkup(同样在同一目录中)?否,没有单个/简单的命令可以用标准工具实现这一点 但是你可以写一个这样的脚本来帮你 for file in *.text

我在一个目录/home/john中找到了一些文件 我想从此目录复制扩展名为*.text的所有文件,并将它们保存为*.text.bkup,再次保存在同一目录中,即/home/john

有没有一个命令可以让我这么做?
此外,使用相同的扩展名,是否可以将所有具有多个扩展名(例如*.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中的文件
,查看第二个问题。