For循环-复制多个文件并在其他目录中重命名扩展名

时间:2019-02-26 15:31:34

标签: bash macos shell

我想将所有.txt扩展名文件从copy_loc目录复制到扩展名为past_loc的{​​{1}}目录。

我不想移动文件,只需复制扩展名为.hml的新位置即可。

.hml

问题:所有past_loc="/Users/Desktop/newdir" copy_loc="/Users/Desktop/*.txt" for file in $copy_loc; do scp "$file" "$(basename "$file" .txt).hml" done 文件都复制到我运行此脚本的目录中,而不是.hml目录中。

2 个答案:

答案 0 :(得分:1)

您可以使用类似以下的内容:

for file in $copy_loc; 
do 
  filename=$(basename -- "$file" .txt)
  cp "$file" "$past_loc"/"$filename".hml 
done

还请注意,由于您没有复制到远程计算机,因此应该使用cp而不是scp

答案 1 :(得分:1)

我将使用参数扩展来执行此操作。嘿,也许是一个数组。 :)

#!/usr/bin/env bash

sources=( /path/to/*.txt )

for file in "${sources[@]}"; do
   cp "$file" "/path/to/target/${file%.txt}.htm"
done

参数扩展允许您避免在命令替换中通过管道运行文本。重量更轻。

请注意,scp s y c o p y。在同一个文件系统之间进行复制时,您不需要这样做。