どのファイルをアーカイブするかfdupesにどのように通知できますか?

どのファイルをアーカイブするかfdupesにどのように通知できますか?

バックアップに問題があるため、ハードドライブにフォルダが多すぎます。そのまま維持したい基本的な「フォルダツリー」があります。 fdupesが削除したくないディレクトリのファイルを削除できないようにするにはどうすればよいですか?

別の重複検索ユーティリティがありますか?

答え1

別の重複検索ユーティリティがありますか?

使用リント--keep-all-tagged オプションを使用して、必要な操作を正確に実行します。

$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree

答え2

進行速度を遅くしてもう少し注意を払うのはどうですか?

それから重複した内容を比較してfdupesファイルに入れます。

fdupes -r /path/to/start > filesToDelete

その後、自分の速度に合わせて保存したいディレクトリまたはファイルを削除できます。filesToDelete

ディレクトリ全体を削除

sed -i '|/directoryToKeep/|d' filesToDelete 

お気に入りのテキストエディタで作業を完了し、filesToDelete作成したい各ファイルのコピーの先頭に表示(おそらくx?)を追加します。維持するこれにより、実行した操作を追跡し、発生した変更を識別できます。

cat aFile | xargs -d "\n" rm

rmx を含むすべての行 (および x によって生成されたすべてのコメントまたは他の行) にエラーが発生しますfdupesが、これらのファイルでは何もしません。ただし、.txtファイルからタグ付けされていない有効なファイル名エントリをすべて削除しますfilesToDelete

答え3

以下は、指定された最初のディレクトリの優先順位を指定する短いスクリプトです。ファイルを直接削除せずに削除するリストのみを印刷します。次の規則に従います。

  1. ファイルを印刷しないdir1
  2. にないファイルがある場合はdir1印刷しないでください。

    #!/usr/bin/env bash
    # priority_dup.sh dir1 dir2 [dir3 ...]`
    
    set1=() # List collects all matching files for a set.
    IFS=$'\n'
    fdupes -r "$@" | while read i; do
        if [[ "$i" == "" ]]; then
            # Create new set, minus all files from dir1.
            set2="$(echo "${set1[*]}" | grep -v "^$1/")"
            # If the sets are different, then we can print files for deletion.
            if [[ "${set1[*]}" != "$set2" && "$set2" != "" ]]; then
                echo "$set2"
                echo ""
                set1=()
            fi
        else
            set1+=("$i")
        fi
    done
    

    ファイルに保存し、ファイルを実行可能にしてから実行してみてください。

関連情報