下面是检查路径中是否存在超过1天且符合名称条件的所有文件夹。如果找到该文件夹,则将其移动到“已删除邮件”文件夹。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash \;
我需要修改文件夹名称,以在末尾包含“ _renamed”。
我以为我可以使用mv中的花括号,但是现在意识到这也需要完整的文件夹路径。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash/{}_renamed \;
有什么方法可以修改文件夹路径而不复制该路径?
是的,find
使用路径名,而不使用文件名。
有两种直接的解决方案:
您可以提取路径名的文件名部分,并在所使用的目标路径名中使用它mv
。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
-maxdepth 1 -type d -mtime +1 \
-name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
-exec sh -c 'mv "$1" "/Users/myname/Desktop/backups/trash/${1##*/}_renamed"' sh {} ';'
在这里,${1##*/}
与相同$( basename "$1" )
,并且$1
是由赋予sh -c
脚本的路径名find
。
如果您的实现支持-execdir
,-exec
则可以使用find
它。使用-execdir
,给定的命令在找到的项目的父文件夹中执行,{}
将是项目的基本名称(使用BSD find
)或前缀为./
(使用GNU find
)的基本名称。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
-maxdepth 1 -type d -mtime +1 \
-name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
-execdir mv {} /Users/myname/Desktop/backups/trash/{}_renamed ';'
有关的:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句