我有几个文件要从不同的目录复制,但每个文件都有相同的名称,所以我需要将它们复制到一个目录,然后将每个文件依次重命名为“expect1、expect2、expect3”等。到目前为止我尝试过的代码是
let i=1; for file in delay* ; do (
cd $file
cp expectation_file ~/target_dir
cd ~/target_dir/
mv expectation_file expect{i}
((i++)) );
done
但这只会使每个文件都称为“expect1”。有人可以帮忙吗?我认为这是错误的计数循环,但无法弄清楚。谢谢!
编辑:那里的代码犯了一个错误。有 1=1 而不是 i=1,然后是 ++i 而不是 i++。
答案1
这可能更通用。
#!/bin/bash
i=0
source_files=$(find /tmp -name "*.zip")
target_dir=~/temp1/
for source in ${source_files}; do
((i++))
mv ${source} ${target_dir}/$(basename ${source})${i}
done
source_files 表达式可以是类似 $(ls *.zip) 的任何内容,此示例查找 /tmp/ 下的所有 zip 文件。