以下は、パス内の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 \;
パスをコピーせずにフォルダパスを変更する方法はありますか?
ベストアンサー1
はい、find
ファイル名ではなくパス名に対して機能します。
2つの簡単な解決策があります。
パス名のファイル名部分を抽出して
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
代わりに使用できます。使用すると、指定されたコマンドは見つかったプロジェクトの親フォルダで実行され、プロジェクトのデフォルト名(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 ';'
関連: