以下是检查路径中存在时间超过 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
.这里,
${1##*/}
与 相同$( basename "$1" )
,$1
是 给sh -c
脚本的路径名find
。如果您的实现支持它,您可以使用
-execdir
代替。使用,给定的命令在找到的项目的父文件夹中执行,并且将是项目的基本名称(使用 BSD )或以前缀(使用 GNU )的基本名称。-exec
find
-execdir
{}
find
./
find
有关的: