저는 Linux를 처음 사용하는데 동일한 파일 이름을 가진 모든 중복 항목을 제거하고 원본 파일은 하나만 유지하는 방법을 알고 싶습니다.
예를 들어 다음이 있습니다.
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
실행할 코드 한 줄(/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에서 중복 파일을 찾아 삭제하는 명령줄 도구자세한 내용은.