これを使用してディレクトリをコピーしました:
cp -r dir/ ../../
考えずに、実際にはdir
ではなくdir
の内容を上記のディレクトリにコピーしたことに気づきました。これで、cp
を正しくやり直すことができるように、削除する必要のあるファイルが散らかっています。特に一致しない場合、誤ってコピーしたすべてのファイルを削除するにはどうすればよいですか?
わかりました、これは基本的に klapauciusの答え と同じです。 (また、cp
が既存のファイルを上書きした場合に発生した損傷は修復されません。)
ソースディレクトリ(dir
内)にいると仮定します。このコマンド:
find . -type f echo '{}' ';'
dir
ディレクトリに存在するすべてのファイルを(再帰的に)一覧表示します(-print
)。 -type f
オプションは、サブディレクトリのリストを防ぐためにあります。
したがって、使用する場合:
find dir -type f -exec echo '../../../{}' ';'
これにより、ターゲットディレクトリ内の対応するファイル(コピー)が一覧表示されます。
これで、リストが正しければ、次を使用してコピーを削除できます。
find dir -type f -exec rm -- '../../../{}' ';'
cp
…hum…から来る残りの空のディレクトリを取り除くことに関して
find
を-exec
と組み合わせて使用します。このようにする前に、ls
でより良いテストを行ってください。
find . -name "*" -exec ls ../../{} \;
次のコードは、フルバージョンのスクリプトを paste.ubunt に配置した改行が埋め込まれたファイル名を処理します。存在と一致するサイズをチェックします...テストデータを生成するためのコードもそこに含まれています。
# 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)
これはフルバージョン(上記)のサンプル出力で、1つのファイルが欠落していて、別のファイルのファイルサイズが元のファイルとは異なります。
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!