バックアップに問題があるため、ハードドライブにフォルダが多すぎます。そのまま維持したい基本的な「フォルダツリー」があります。 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
rm
x を含むすべての行 (および x によって生成されたすべてのコメントまたは他の行) にエラーが発生しますfdupes
が、これらのファイルでは何もしません。ただし、.txtファイルからタグ付けされていない有効なファイル名エントリをすべて削除しますfilesToDelete
。
答え3
以下は、指定された最初のディレクトリの優先順位を指定する短いスクリプトです。ファイルを直接削除せずに削除するリストのみを印刷します。次の規則に従います。
- ファイルを印刷しない
dir1
にないファイルがある場合は
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
ファイルに保存し、ファイルを実行可能にしてから実行してみてください。