他のディレクトリにあるあるディレクトリのファイルを削除する

他のディレクトリにあるあるディレクトリのファイルを削除する

以下を使用してディレクトリをコピーしました。

cp -r dir/ ../../

特に考えずに上記のディレクトリに内容をコピーしたのではなく、dir内容をコピーしたという事実に気づきました。dir今すぐ正しく実行できるように、混乱しているファイルを削除する必要がありますcp。誤ってコピーしたファイルが特定のコンテンツと一致しない場合は、どのようにすべて削除しますか?

答え1

さて、これは基本的に同じです。クラパウチウスの答え。 (cp既存のファイルの一部を上書きした場合に発生した破損は修復されません。)

ソースディレクトリ()にあるとしますdir。このコマンドは次のとおりです。

find . -type f -exec echo '{}' ';'

ディレクトリ内のすべてのファイルを(再帰的に)リストしますdir(に似ています-print)。この-type fオプションを使用すると、サブディレクトリは一覧表示されません。

したがって、以下を使用する場合:

find dir -type f -exec echo '../../../{}' ';'

これにより、ターゲットディレクトリに対応するファイル(コピー)が一覧表示されます。

リストが正しい場合は、次を使用してコピーを削除できます。

find dir -type f -exec rm -- '../../../{}' ';'

残りの空のディレクトリを整理することについてはcp…まあ…からインポートされたものです。

答え2

findと一緒に使用されます-exec。次のように前にテストすることをお勧めしますls

find . -name "*" -exec ls ../../{} \;

答え3

次のコードは、フルバージョンスクリプトを配置した埋め込み改行文字を含むファイル名を処理します。.ubuntu 貼り付け。存在するかどうかに一致するサイズを確認してください。テストデータを生成するコードもここに含まれています。

# This lists the original fully-qualified filename, 
# and its would-be counterpart (assuming it exists) 
unset a i
while IFS= read -r -d $'\0' relf; do
    printf "%s\n$s" "$PWD${relf:1}" "$(dirname "$(dirname "$PWD")")${relf:1}"
done < <(find  . -type f  \! -name '.' -name '*' -print0)

以下は、あるファイルが欠落しており、他のファイルのファイルサイズが元のものとは異なるフルバージョン(上記と同じ)の出力例です。

WARNING -----
NOT in target   ./file1
ok --------
sizes match     ./c/file4-in-subdir
WARNING ------
size mis-match  ./file3   is   triple-spaced
ok --------
sizes match     ./file2
has newline!

答え4

PATH_DIR2からPATH_DIR1までの既存のファイルを削除しようとしています。

find PATH_DIR1 -type f  -exec basename '{}' ';' | xargs printf -- 'PATH_DIR2/%s\n' | xargs rm

説明する:

  1. PATH_DIR1 のすべてのファイル名をリストします。

PATH_DIR1 -type f -exec デフォルト名 '{}'';'検索

  1. PATH_DIR2の既存のファイルを使用した古いリストのフィルタリング(クロスデータの検索)

xargs printf -- 'PATH_DIR2/%s\n'

  1. フィルタリングされた結果の削除

xargs rm

関連情報