我发现了几个有解决方案的类似问题,除了它们不涉及变量。
我在文件和目录树中有一个特定的模式 - 模式是单词 TEMPLATE。我想要一个脚本文件通过将单词 TEMPLATE 替换为变量 ${newName} 中包含的其他名称来重命名所有文件和目录
如果我知道 ${newName} 的值是“弗雷德住在这里”,那么命令
find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/Fred lives here}"' {} \;
会做这项工作
但是,如果我的脚本是:
newName="Fred lives here"
find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/${newName}}"' {} \;
然后单词 TEMPLATE 被替换为 null 而不是“Fred 住在这里”
我需要 $0 左右的 "" 因为路径名中有空格,所以我不能做类似的事情:
find . -name '*TEMPLATE*' -exec bash -c 'mv "$0" "${0/TEMPLATE/"${newName}"}"' {} \;
谁能帮我让这个脚本工作,以便所有包含单词 TEMPLATE 的文件和目录都将 TEMPLATE 替换为任何${newName}
值
例如,如果newName="A different name"
我有一个目录
/foo/bar/some TEMPLATE directory/with files
然后目录将被重命名为
/foo/bar/some A different name directory/with files
并且一个名为的文件some TEMPLATE file
将被重命名为
some A different name file