Raspbian、debian:find $ SOURCEが$ SOURCEの下のすべてのディレクトリをそれ自体なしで返すようにする方法[重複]

Raspbian、debian:find $ SOURCEが$ SOURCEの下のすべてのディレクトリをそれ自体なしで返すようにする方法[重複]

rsyncを使用してファイルを含むディレクトリをコピーし、--remove-source-filesを使用してrsyncにソースファイルを削除します。残念ながら、ディレクトリは削除されないので、空のディレクトリをすべて削除したいと思います。下にソース1とソース2。 find -exec rmdirコマンドはこれを行いますが、残念ながらSOURCEディレクトリ自体も削除されます。

copy.sh

SOURCE1="/mnt/download/transmission/complete/"
SOURCE2="/mnt/download/sabnzbd/completed/"

sudo rsync --remove-source-files --progress --ignore-existing -vr  /mnt/download/transmission/complete/ /mnt/dune/DuneHDD_1234
sudo rsync --remove-source-files --progress --ignore-existing -vr /mnt/download/sabnzbd/completed/ /mnt/dune/DuneHDD_1234
find $SOURCE1 -not -name "complete" -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -not -name "completed" -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;

私も次のコードを試しました

*
find $SOURCE1 -mindepth 2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -mindepth 2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;

そしていいえ

*
find $SOURCE1 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;
find $SOURCE2 -type d -empty -prune -exec rmdir --ignore-fail-on-non-empty -p \{\} \;

mkdir testを追加してSOURCE1を "/mnt/download/transmission/complete/test"に変更すると、作成したディレクトリは常に削除されますが、これを正しい方法で実行したいと思います。

例: 6 つのディレクトリを作成しました。

test10/

test10/test11/

test10/test11/test12/

test10/test11/test12/test

test1/

test1/test2/

test1/test2/test3/

test1/test2/test3/test

copy.shを実行した後、ターゲットのディレクトリとファイル(test1/test2/test3/testとtest10/test11/test12/test)の完全なコピーを取得し、以下を含むソースのディレクトリとファイルを削除しました。ソース($ SOURCE1および$ SOURCE2)自体。

ソースディレクトリ自体を除外するようにfindに指示する方法はありますか?つまり、次のディレクトリの下のすべての内容を削除する必要がありますが、ディレクトリ自体は削除しないでください。

SOURCE1="/mnt/download/transmission/complete/"
SOURCE2="/mnt/download/sabnzbd/completed/"

答え1

を使用するには、ソースディレクトリの下のレベルを最初に見つけるためにfindフラグを追加する必要があります。-mindepth 1

ls -d */ただし、ディレクトリ名の印刷などのさまざまなツールを使用することもできます。

答え2

私はもう少しエレガントな方法を見つけました。

SOURCE1="/mnt/download/transmission/complete/"  # server1
SOURCE2="/mnt/download/sabnzbd/completed/"      # server1
DESTINATION="/mnt/dune/DuneHDD_1234/Transfer"   # server2

# move downloads to server2
sudo rsync --remove-source-files --progress --ignore-existing -vr $SOURCE1 $DESTINATION
sudo rsync --remove-source-files --progress --ignore-existing -vr $SOURCE2 $DESTINATION
# delete (only) empty directories left behind by rsync
find $SOURCE1 -mindepth 1 -type d -empty -delete # -mindepth:dont delete parent dir,-type d -empty -delete:delete only empty directories
find $SOURCE2 -mindepth 1 -type d -empty -delete

源泉:空のディレクトリツリーの削除(ファイルを削除せずにできるだけ多くのディレクトリを削除) 許可されない場合はお知らせください。

関連情報