サブディレクトリがあるフォルダが2つあります。 1つは学習画像を持ち、もう1つは学習ラベルを持っています。
- 画像は正確に1つのタグに属します。
- 画像とラベルの内容が異なります。
- 画像とタグは同様のパスにあります。たとえば、
- 絵/18/1334/image1。Web文書
- 商標/18/1334/image1。PNG
- ファイル名(拡張子ではありません)が同じです。
- サブディレクトリに複数のファイルがある可能性があります。
その画像を持たないすべてのタグをどのように削除できますか(またはその逆も同様です)?たとえば、
図:
.
|---18
|---a1
| |---a1.webp
| |---a11.webp
|---a2
| |---a2.webp
|---a3
商標
.
|---18
|---a1
| |---a1.png
| |---a11.png
|---a2
| |---a2.png
|---a3
|---a3.png
良い解決策(該当するタグや画像がない場合はファイルを削除してください):
.
|---18
|---a1
| |---a1.*
| |---a11.*
|---a2
| |---a2.*
|---a3
最適なソリューション(現在空のフォルダも削除):
.
|---18
|---a1
| |---a1.*
| |---a11.*
|---a2
|---a2.*
アスタリスク * は webp または png を表します。
答え1
そして:find
bash
cd
and の親ディレクトリに移動し、次を実行しimages
ますlabels
。
find . \( -name "*.webp" -o -name "*.png" \) -type f -exec bash -c '
if [ "${1##*.}" = "webp" ]; then
file=${1/\/images\//\/labels\/}
file=${file%webp}png
else
file=${1/\/labels\//\/images\/}
file=${file%png}webp
fi
[ ! -f "$file" ] && echo rm "{}"
' bash {} \;
echo
実際にファイルを削除するには削除する必要があります。
空のディレクトリを削除するには、次を参照してください。サブツリーから空のディレクトリをすべて削除する方法は?。