多个项目名称复制

多个项目名称复制

所以我有一个包含 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”,它将无法按预期工作,并且不会对文件名中的空格或换行符等进行清理。但它可能会做你想要的事情。

相关内容