递归地在文件名前添加文本

2 linux bash rename

我想在特定类型的每个文件的名称前添加文本 - 在本例中为 .txt 文件 - 位于当前目录或子目录中。

我试过了:

find -L . -type f -name "*.txt" -exec mv "{}" "PrependedTextHere{}" \;
Run Code Online (Sandbox Code Playgroud)

问题在于处理引用./附带的路径部分{}

任何帮助或替代方法表示赞赏。

Rei*_*ase 9

你可以做这样的事情

find -L . -type f -name "*.txt" -exec bash -c 'echo "$0" "${0%/*}/PrependedTextHere${0##*/}"' {} \;
Run Code Online (Sandbox Code Playgroud)

在哪里

  • bash -c '...' 执行命令
  • $0是传入的第一个参数,在这种情况下{}- 完整文件名
  • ${0%/*}删除/文件名中包括最后一个之后的所有内容
  • ${0##*/}删除/文件名之前的所有内容,包括文件名中的最后一个

一旦您对它的工作感到满意,就用替换