Shell-Script

使用 find 將目錄重命名為垃圾目錄

  • June 17, 2018

以下是檢查路徑中是否存在超過 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適用於路徑名,而不是文件名。

有兩個直接的解決方案:

  1. 您可以提取路徑名的文件名部分,並將其用於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 ';'

有關的:

引用自:https://unix.stackexchange.com/questions/450292