フォルダーBからフォルダーAのファイルを差し引く


2

8000個の画像があるフォルダーAと9000個の画像があるフォルダーBがあります。フォルダーBには、フォルダーAからの8000個の画像と、追加の1000個の画像が含まれています。フォルダーAに既にある8000個の画像を削除し、「新しい」1000個の画像のみを残します。

誰もが仕事を成し遂げるエレガントな方法を知っていますか?(ところで。日付で並べ替えて新しいものを取得することはできません)

回答:


2

これを行うには、単純なbashスクリプトを使用できます。

for file in *.*; do if [ -f "/FolderA/${file}" ]; then rm "/FolderB/$file"; fi; done;

このスクリプトは、FolderAに既に存在するファイルを削除する場所であるFolderBに既にいることを前提としています。

画像ファイルの拡張子(.png、.gifなど)がわかっていて、正確なフォルダー名がある場合は、微調整できます。そのため、代わりにまたは*.*を使用できます。*.png*.gif

より安全なバージョン:

for file in *.*; do if [ -f "/FolderA/${file}" ]; then mv "/FolderB/$file" ~/.Trash; fi; done;

これにより、ファイルがゴミ箱に移動します。使用rmは一方通行です。rmコマンドでEnterキーを押すと完了です。そのファイルは永久に失われます。ゴミ箱に移動して、探している結果を確実に取得してください。


;前に行方不明thenfi;前に行方不明done
フィリポス

魅力のように働いた。幻想
B101

1

findutilshomebrewを使用してGNU をインストールした場合は、ターミナルでcdto folderBを入力します。

echo rm $(find /path/to/folderA -type f -printf "%P\n")

出力を確認してください。削除するファイルがリストされている場合は、ファイルechoを実際に削除せずに繰り返します。

findシステムのデフォルトにはがありませんが-printf

echo rm $(find /path/to/folderA -type f -execdir {} \; )

folderB!からも発行されます)は同じジョブを実行する必要があります(ここではテストできません)。


findを使用しない理由はあり-deleteますか?
grg

あなたが見つけたファイルを削除したくないので、それは他のフォルダの対応するものだからです。-delete私の知る限り、そのような機能はありません。
フィリポス

1
  • フォルダーA:A-copyの複製を作成します。
  • ターミナルを開いて入力します touch -mt 200001010000 /path/to/A-copy/*.*
  • ファイルをA(コピー)からBに移動し、そこにある既存のファイルを置き換えます。
  • 変更日でフォルダーBのファイルを並べ替えます。
  • フォルダBの2000年1月1日のmod日付のすべてのファイルを削除します

これは、フォルダーaの元のファイルのmod日付を変更しません。


フォルダAに既に2000年1月1日のmod日付のファイルが含まれている場合、手順2で別の日付を選択します。


-1

フォルダーBにフォルダーAのすべての画像とさらに1000がある場合、フォルダーAを削除するだけです!

シンプル!

ただし、フォルダBに9000個の画像があり、フォルダAに9000個の画像があるが、フォルダBにはフォルダAのすべての画像がないdiffという違いがある場合は、違いを見つけるために使用します。

とはいえ、これはファイル名の違いにすぎません。同じ名前を共有する2つの画像がある場合がありますが、これはまったく異なる問題です。

コード:

diff -rq folder1 folder2

rは、サブディレクトリを含む各ディレクトリを再帰的に見るようにdiffに指示します。qスイッチは、diff briefモードを設定します。短いモードを設定しなかった場合、diffは2つのフォルダー間でどのファイルが異なるかを示すだけでなく、両方の場所に存在するが同一ではないテキストファイルの実際の行ごとの違いも表示します。


B = A '+ XおよびA = A'の場合、Aを削除してもBはXのままになりません...
klanomath

b101の投稿の最初の部分を読み直してください。彼は私の最初の段落が何を解決するかを正確に述べています。
chriszanf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.