如何改进下面的命令以更改文件名中的字符串。
find . -type f -name '*<today>*' -exec mv {} {}_renamed \;
实际上,我的目录中有一些文件,其中以今天的日期为名称的一部分。我想更改所有文件的名称,以便仅将文件名中的日期字符串从今天的日期更改为昨天的日期。
我不想在文件名后添加后缀或前缀,而是操纵文件名。
例如
,命令文件名之前是命令文件名xxx20170821yyyy.ppp
之后xxx20170820yyyy.ppp
并对所有名称中包含20170821
字符串的文件重复此操作。
使用rename
像Perl命令的一部分。
find . -type f -name '*20170919*' -execdir
rename -n 's/20170919/20170918/' '{}' \;
使用execdir
,因为它是在执行其部分要运行的命令文件中的相对路径中找到其中execdir
的回报。这将防止传递文件的完整路径(相对于当前工作目录),并避免具有相同模式的文件夹重命名而不是文件名本身错误。
如果您的所有文件都在一个目录中,则在一个衬里下面rename
就足够了。
rename -n 's/20170919/20170918/' *20170919*
-n
如果您相信重命名结果具有实际的重命名,则将其删除。您可能需要添加-v
以查看正在重命名的内容。
最后,如果您希望每天对一堆文件执行此操作,则可能需要指定今天的日期。然后在双引号之间使用date
以下命令$(...)
(命令替换)中的命令。
find . -type f -name "*$(date +"%Y%m%d")*" -execdir
rename -n "s/$(date +"%Y%m%d")/$(date -d "-1day" +"%Y%m%d")/" '{}' \;
ps,由于您使用的是csh
shell,因此您需要使用`...`
而不是$(...)
,或者最好切换到新的shell,例如bash
,zsh
。
find ./ -type f -name "*`date +"%Y%m%d"`*" -execdir
rename -n "s/`date +"%Y%m%d"`/`date -d "-1day" +"%Y%m%d"`/" '{}' \;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句