如何在bash脚本中使用单个命令复制所有文件

时间:2015-10-27 14:15:22

标签: bash

下面的代码帮助我将文件从test1文件夹复制到test2文件夹但是我不需要每次都制作test2文件夹而且每次都不想跳跃,我需要复制代码中所有提到的文件命令,这可能吗?

for file in /Path/test1/*mdp ; do
    mkdir -p /Path/test2/"$name"
    cp "$file" "/Path/test2/$name"
done

for file in /Path/test1/*gro ; do
    mkdir -p /Path/test2/"$name"
    cp "$file" "/Path/test2/$name"
done

for file in /Path/test1/*top ; do
    mkdir -p /Path/test2/"$name"
    cp "$file" "/Path/test2/$name"
done

for file in /Path/test1/*nvt1.cpt ; do
    mkdir -p /Path/test2/"$name"
    cp "$file" "/Path/test2/$name"
done

2 个答案:

答案 0 :(得分:1)

你可以这样做:

newpath="/Path/test2/$name"
mkdir -p "$newpath"

cp /Path/test1/*{mdp,grp,top,nvt1,cpt} "$newpath"

答案 1 :(得分:0)

for循环可以采用多种模式;每个的扩展组合成一个循环迭代的列表。 mkdir命令可以移出循环,因为它不依赖于file的值。

mkdir -p /Path/test2/"$name"
for file in /Path/test1/*mdp /Path/test1/*gro /Path/test1/*top /Path/test1/*nvt1.cpt ; do
    cp "$file" "/Path/test2/$name"
done

但是,anubhava's answer更好,因为它只运行cp一次,而不是每个文件运行一次。大括号是较长但标准

的快捷方式
cp /Path/test1/*mdp /Path/test1/*grp /Path/test1/*top /Path/test1/*nvt1 /Path/test1/*cpt "$newpath"