Linux如何模糊匹配多个文件批量copy到另一个目录?

我的目的是想要将./src/**/*.txt批量重命名并移动到./target/**/*.md,命令应该怎么写?

阅读 5k
3 个回答

可以利用find命令先找出所有的txt文件,然后在批量改名(把src替换为target,把txt替换为md),然后进行复制。

如果src目录下只有txt文件,则直接src目录改名,然后txt文件改名更方便,或者说先txt文件改名(原路径),然后src文件目录改名。

bash 命令之外,nodejs 可以写脚本 fs, 自己函数实现

Zsh 的話兩條命令(注意路徑末尾的 /):

rsync -am --include='*/' --include='*.txt' --exclude='*' ./src/ ./target/
zmv -W './target/**/*.txt' './target/**/*.md'

Bash 的話得寫腳本:

for f1 in $(find ./src -name '*.txt')
do
    f2=${f1#./src/}  # 去掉前綴
    f2=${f2%.txt}  # 去掉後綴
    mkdir -p ${f1%/*}  # 創建文件夾
    mv "${f1}" "./target/${f2}.md"
done

如果 ./src/ 只有 txt 文件而沒有其他文件,則更爲方便。Zsh:

mv ./src ./target
zmv -W './target/**/*.txt' './target/**/*.md'

Bash:

mv ./src ./target
cd ./target
for f in $(find . -name '*.txt')
do mv "${f}" "${f%.txt}.md"
done
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题