Bash脚本来复制文件

时间:2014-08-22 09:58:34

标签: linux bash

我在目录中有25个文件。我需要收集25000个文件用于测试目的。我想我可以一遍又一遍地复制这些文件,直到我得到25000个文件。我可以手动复制粘贴1000次,但这似乎很乏味。所以我想我可以写一个脚本来为我做。我试过了

cp * .

作为试用但我收到一个错误,说源和目标文件是相同的。如果我要进行自动化,我将如何做到这一点,以便1000个新文件中的每一个都使用唯一的名称制作?

4 个答案:

答案 0 :(得分:2)

如果要保留文件的扩展名,可以使用它。假设您要复制所有txt - 文件:

#!/bin/bash

for f in *.txt
do
  for i in {1..10000}
  do
    cp "$f" "${f%.*}_${i}.${f##*.}"
  done
done

答案 1 :(得分:2)

正如评论中所讨论的,你可以这样做:

for file in *
do
   filename="${file%.*}"    # get everything up to last dot
   extension="${file##*.}"  # get extension (text after last dot)
   for i in {00001..10000}
   do
       cp $file ${filename}${i}${extension}
   done
done

技巧for i in {00001..10000}用于循环从1到10000,其数字带有前导零。

${filename}${i}${extension}$filename$i$extension相同,但更清楚地了解变量名称和文本内容。这样,您也可以${filename}_${i}${extension}来获取a_23.txt等文件

如果您当前的文件与特定模式匹配,您始终可以for file in a*(如果它们都是a + something格式)。

答案 2 :(得分:1)

你可以试试这个:

for file in *; do for i in {1..1000}; do cp $file $file-$i; done; done;

它会在任何现有文件中附加一个数字。

答案 3 :(得分:1)

下一个脚本

for file in *.*
do
    eval $(sed 's/\(.*\)\.\([^\.]*\)$/base="\1";ext="\2";/' <<< "$file")
    for n in {1..1000}
    do
        echo cp "$file" "$base-$n.$ext"
    done
done

意愿:

  • 获取扩展程序*.*
  • 的所有文件
  • 创建基本名称和扩展名(sed
  • 在一个循环中1000次将原始文件复制到file-number.extension
  • 用于DRY-RUN,如果满足则删除回声