バックアップからデータを復元しましたが、復元されたデータに同じフォルダ/ファイルの複数のバージョンがありました。フォルダ/ファイル名は、ファイルとフォルダに_000 _001 _002などとして指定されました。すべての修正タイムスタンプは同じです。フォルダ/ファイルは次のとおりです。
[PATH ~/Folder/9] (VERSION 1) EMPTY - and can be deleted
[PATH ~/Folder/9_000] (VERSION 2) EMPTY - and can be deleted
[PATH ~/Folder/9_001] (VERSION 3) Data is in this last one
FILEA.TXT (VERSION 1) remove/delete this one
FILEA_000.TXT (VERSION 2) remove/delete this one
FILEA_001.TXT (VERSION 3) remove/delete this one
FILEA_002.TXT (VERSION 4) I need to keep this one and then rename
FILEB.TXT (VERSION 1) remove/delete this one
FILEB_000.TXT (VERSION 2) I need to keep this one and then rename
これらのフォルダの中には、6つ以上のフォルダの深さがあります。私が見つけたパターンは、各フォルダ/ファイルの最後のファイルまたはフォルダのバージョンが良いバージョンであり、不要なフォルダが空であることです。悪いことは、すべてのファイル/フォルダのバージョン数が同じではないことです。したがって、FILEA.TXTには4つのバージョン(FILEA.TXT〜FILEA_002.TXT)があるため、FILEB.TXTには2つのバージョン(FILEB.TXTとFILEB_000.TXT)しかありません。そのため、すべてのファイルを検索できず、_002
移動または削除できません。 bash()を使用すると、不要な空のフォルダをすべて簡単に削除できます。find . -type d -empty -delete
これは、名前変更以外のフォルダ関連の問題のいくつかを解決します。
ソフトウェアが回復したデータを正しくインポートできるように、不要なファイルをすべて削除してから、フォルダ/ファイルのバージョン番号を削除する必要があります。以下は、パスとそのパスにあるファイルとフォルダの例です。
[PATH ~/Folder/9] EMPTY - and can be deleted
[PATH ~/Folder/9_000] EMPTY - and can be deleted
[PATH ~/Folder/9_001] Data is in this last one
[PATH ~/Folder/9_001/62BF7CA1] EMPTY - and can be deleted
[PATH ~/Folder/9_001/62BF7CA1_000] EMPTY - and can be deleted
[PATH ~/Folder/9_001/62BF7CA1_001] Data is in the last one
[ FOLDERS/FILES IN "~/Folder/9_001/62BF7CA1_001" ]
Archive - unwanted deleted it
Archive_000 - unwanted deleted it
Archive_001 - unwanted deleted it
Archive_002 - unwanted deleted it
Archive_003 - keep
Documents - unwanted deleted it
Documents_000 - keep
FolderX - unwanted deleted it
FolderX_000 - unwanted deleted it
FolderX_001 - unwanted deleted it
FolderX_002 - keep
62BF7CA1.PDF - unwanted deleted it
62BF7CA1_000.PDF - unwanted deleted it
62BF7CA1_001.PDF - unwanted deleted it
62BF7CA1_002.PDF - keep
62BF7CA1.TXT- keep
62BF7CA1.DOC - unwanted deleted it
62BF7CA1_000.DOC - unwanted deleted it
62BF7CA1_001.DOC - unwanted deleted it
62BF7CA1_002.DOC - keep
62BF7CA1.QIF - unwanted deleted it
62BF7CA1_000.QIF - unwanted deleted it
62BF7CA1_001.QIF - unwanted deleted it
62BF7CA1_002.QIF - keep
このパスに保持するファイルとフォルダは次のとおりです。
Archive_003
Documents_000
FolderX_002
62BF7CA1_002.PDF
62BF7CA1.TXT
62BF7CA1_002.DOC
62BF7CA1_002.QIF
...その後、各フォルダにある場合は、_000 _001 _002などを削除する必要があります。
Archive
Documents
FolderX
62BF7CA1.PDF
62BF7CA1.TXT
62BF7CA1.DOC
62BF7CA1.QIF
sedやパイプなどを使うのは簡単かもしれませんが、よくわかりません。
答え1
すべてのファイルを繰り返します。このコンポーネントにも一致するものを見つけます_nnn
。最後の項目を識別し、残りの項目を削除します。
フォルダツリーに適用する必要がある場合、1つのオプションはそれをスクリプトに入れて構文からそのスクリプトを呼び出すことですfind -type d -exec
。
for file in *.*
do
[[ -d "$file" || $file =~ _[[:digit:]]{3}\. ]] && continue
echo -n "Considering $file: " >&2
extn="${file/*.}"
versions=("$file")
keep="$file"
# Look at matching files
for version in "${file%.$extn}"_???."$extn"
do
[[ -f "$version" ]] || continue
# Save every one. Identify the current last
versions+=("$version")
keep="$version"
echo -n "$version " >&2
done
echo "==> keep $keep" >&2
# Delete them all except the last
for version in "${versions[@]}"
do
[[ "$version" != "$keep" ]] && echo rm -f -- "$version"
done
[[ "$keep" != "$file" ]] && echo mv -f -- "$keep" "$file"
done
echo
前のステートメントを削除するrm -f -- "$version"
と、快適になると、mv -f -- "$keep" "$file"
削除したいファイルが削除され、保持したいファイルが保持されます。