Shell-Script
使用 find 將目錄重命名為垃圾目錄
以下是檢查路徑中是否存在超過 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
。 2. 如果您的實現支持它-execdir
,您可以使用它。使用,給定的命令在找到的項目的父文件夾中執行,並且將是項目的基本名稱(使用 BSD )或前綴為(使用 GNU )的基本名稱。-exec``find``-execdir``{}``find``./``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 ';'
有關的: