所以我有一个包含 2n 个文件的文件夹。其中 n 个是 .foo 文件,n 个是 .bar 文件。我想将 .foo 文件的文件名(它们全都不同)复制到按字母顺序排列的 .bar 文件中。扩展名必须保持不变。
答案1
假设您有 (a,b,c).foo 和 (p,q,r).bar:
ls
a.foo b.foo c.foo p.bar q.bar r.bar
您用数组变量来收集 foos 和 bars:
foos=(*.foo)
bars=(*.bar)
数组的大小为 ${#foos[*]},索引从 0 到 len-1。第一个元素是 ${foos[0]} 或 ${bars[0]}。
for f in $(seq 0 $((${#foos[*]}-1)))
do
fool=${foos[$f]};
echo mv ${bars[$f]} ${fool%.foo%.bar}
mv ${bars[$f]} ${fool/.foo/.bar}
done
mv p.bar a.bar
mv q.bar b.bar
mv r.bar c.bar
如果您不喜欢回显,请将其删除。该脚本假定 foo 和 bar 文件的数量匹配。我不确定第 3 行和第 4 行是否始终按字母顺序列出名称 - 在我的测试中确实如此,但我没有对此的书面规范。
如果文件包含额外的“.foo”,例如“a.foo-bork.foo”,它将无法按预期工作,并且不会对文件名中的空格或换行符等进行清理。但它可能会做你想要的事情。