に存在してはいけないこれは再帰的にファイルを削除します。Linuxのコマンドライン私は、フォルダ/ 1に次のフォルダ構造を持っている他のフォルダ
/1/1/
1.png
2.png
5.png
6.png
/1/2/
3.png
4.png
/1/3/
10.png
11.png
14.png
この例では、サブフォルダ1-3があります。実際には何百ものフォルダが生きています。各サブフォルダには未知の量のpngファイルが含まれています。
それから私は、フォルダ/ 1、それにまったく同じサブフォルダ構造が、より多くの画像を持っているフォルダ/ 2を持っている:
/2/1/
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
5.jpg
/2/2/
1.jpg
2.jpg
3.jpg
4.jpg
/2/3/
10.jpg
11.jpg
12.jog
13.jpg
14.jpg
フォルダ2(.JPG)で、異なるファイル拡張子を注意してください。ファイルの共通点はファイル名だけです。拡張子はフォルダ/ 1と/ 2では異なります。
私がLinuxで達成しようとしているのは、フォルダ/ 2をきれいにして、同じ名前のフォルダ/ 1にファイルが存在する画像だけです。
誰でも私にコマンドラインまたはbashスクリプトから使用できるコマンドを提供できますか?
フォルダ/ 2での最終的な結果は次のようになります。
/2/1/
1.jpg
2.jpg
5.jpg
6.jpg
/2/2/
3.jpg
4.jpg
/2/3/
10.jpg
11.jpg
14.jpg
ありがとうございました!それが正しいファイルを削除し、すべてがOKに見える場合、持っ再びそれを実行してしまう場合、それは一度エコーする
cd /path/to/2 || exit 1
find -type f -name '*.jpg' -print0 |
while IFS= read -r -d '' path; do
if [[ ! -e "/path/to/1/${path%.jpg}.png" ]]; then
# ^^^^^^^^^^ adjust this path
echo rm -- "$path"
#^^^^ remove this after the first dry-run
fi
done
実行します。ここでは
私は、 '|| exit 1'を 'cd/path/to/2'にコピーします。 – Cyrus
@Cyrus良いアイデア。 – redneb
@rednebありがとう - 私が必要とするもののように見えます。しかし、私は得る:行3: - r:コマンドが見つかりません – domi771