私はLinuxを初めて使用するのに同じファイル名を持つすべての重複エントリを削除し、元のファイルを1つだけ保持する方法を知りたいです。
たとえば、次のようなものがあります。
dir_new_001 = rdt.txt
dir_new_002 = rdt.txt
dir_new_003 = rdt.txt
コマンドラインでこれを行いたいです。
答え1
それでは、この仕事の私の理解を説明しましょう。
3つの列を含む行を含むテキストファイル "file.txt"があります。
directory = file
同じ名前のファイルが別のディレクトリにある可能性があるため、同じ名前のファイルを一度だけ保持し、残りは削除する行を作成する必要があります。正しいですか?
入力ファイル "file.txt":
dir_new_001 = rdt.txt
dir_new_002 = rdt.txt
dir_new_003 = rdt.txt
dir_new_001 = rdt2.txt
dir_new_002 = rdt2.txt
dir_new_001 = rdt3.txt
dir_new_003 = rdt3.txt
実行するコードを1行(/bin/shまたは/bin/bashを使用):
for i in $(cat file.txt|awk '{print $3}'|sort|uniq); do F=$(grep " = $i$" file.txt|tail -n+2|awk '{print $1"/"$3}'|xargs); [ -n "${F}" ] && echo "rm -f ${F}"; done|sort
結果:
rm -f dir_new_002/rdt2.txt
rm -f dir_new_002/rdt.txt dir_new_003/rdt.txt
rm -f dir_new_003/rdt3.txt
ファイルを削除するには、「echo」を使用する代わりにいつでも「rm」を使用して印刷できます。
答え2
ユーティリティへのアクセス権がある場合は、fdupes
次のコマンドを実行します。
$ fdupes -rdN dir/
r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
バラよりfdupes – Linuxで重複ファイルを見つけて削除するコマンドラインツール詳細については。