linux - 递归地将文本添加到文件名

标签 linux bash rename

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

我试过:

find -L . -type f -name "*.txt" -exec mv "{}" "PrependedTextHere{}" \;

问题在于处理 ./ 路径中的 ./ 部分,该路径随 {} 引用一起出现。

感谢任何帮助或替代方法。

最佳答案

你可以这样做

find -L . -type f -name "*.txt" -exec bash -c 'echo "$0" "${0%/*}/PrependedTextHere${0##*/}"' {} \;

在哪里

  • bash -c '...' 执行命令
  • $0 是传入的第一个参数,在本例中为 {} -- 完整文件名
  • ${0%/*} 删除文件名中最后一个 / 及其之后的所有内容
  • ${0##*/} 删除文件名中最后一个 / 之前的所有内容

替换 一旦你满意它的工作。

关于linux - 递归地将文本添加到文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740505/

相关文章:

bash - xfce-terminal 随机位置的新窗口加上回显该值

Bash:Scriptception,在脚本中创建脚本

mysql - mysql中如何为所有表添加前缀

git diff 重命名文件

python - 如何在启动时运行 python 程序(包含 tkinter)

c++ - 以编程方式告诉 PDCurses 使窗口与物理屏幕大小相同的方法?

Bash如何创建目录中所有文件名的txt文件

XCode 4 : Archive is using old project name

linux - 使用 fping 显示事件的主机

linux - 检查 RPM 依赖项