ホームディレクトリのサブディレクトリにあるすべての重複ファイルを削除します。

ホームディレクトリのサブディレクトリにあるすべての重複ファイルを削除します。

私は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」を使用して印刷できます。

おすすめ記事