find を使用して、ディレクトリ名をごみ箱ディレクトリに変更します。

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 \;

パスをコピーせずにフォルダパスを変更する方法はありますか?

ベストアンサー1

はい、findファイル名ではなくパス名に対して機能します。

2つの簡単な解決策があります。

  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" )です。$1sh -cfind

  2. 実装がこれをサポートしている場合は、-execdir代わりに使用できます。使用すると、指定されたコマンドは見つかったプロジェクトの親フォルダで実行され、プロジェクトのデフォルト名(BSDを使用)またはデフォルトの名前プレフィックス(GNUを使用)になります。-execfind-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 ';'
    

関連:

おすすめ記事