我在目录中有25个文件。我需要收集25000个文件用于测试目的。我想我可以一遍又一遍地复制这些文件,直到我得到25000个文件。我可以手动复制粘贴1000次,但这似乎很乏味。所以我想我可以写一个脚本来为我做。我试过了
cp * .
作为试用但我收到一个错误,说源和目标文件是相同的。如果我要进行自动化,我将如何做到这一点,以便1000个新文件中的每一个都使用唯一的名称制作?
答案 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
)