특정 파일 삭제

특정 파일 삭제

이 디렉토리에는 /home/Scrivania/pdb_files동일한 파일 이름 형식인 XXX_?.pdb.

예를 들어,

A4R_A.pdb 
A4R_B.pdb
A4R_C.pdb
TY6_A.pdb
001_A.pdb
001_B.pdb
ATE_B.pdb

이 파일 중 일부는 유지하고 다른 파일은 삭제하면 됩니다. 특히 이름의 처음 세 문자가 동일한 파일이 여러 개 있는 경우 마지막 문자 " "에 관계없이 하나만 유지하고 싶습니다 ?.

따라서 결국 내 디렉토리에는 다음 파일만 있어야 합니다.

A4R_A.pdb 
TY6_A.pdb
001_A.pdb
ATE_B.pdb

다음 항목을 삭제하세요: A4R_B.pdb, A4R_C.pdb,001_B.pdb

A처음 세 개의 동일한 문자가 있는 파일( , B또는 ) 이 유지되는 것은 중요하지 않습니다 C. 또한 " ?" 문자가 문자가 아닌 숫자이거나 A, B, C와 다른 문자 인 경우도 있을 수 있습니다 .

따라서 선택은 처음 세 문자만을 기준으로 해야 합니다. 예를 들어, 처음 세 문자가 동일한 더 많은 파일의 경우 한 가지 전략은 처음 접하는 파일만 유지하는 것입니다.

누구든지 이 작업을 수행할 수 있는 bash 스크립트를 제안할 수 있습니까?

답변1

이 시도,

for dup in $(ls  *.pdb | awk 'BEGIN{FS="_"}{if (++dup[$1] >= 2) print}')
do
   rm -f $dup; 
done
  • FS="_"밑줄을 필드 구분 기호로 유지하세요.
  • (++dup[$1] >= 2)카운터가 2보다 크거나 같으면 전체 파일 이름이 인쇄되고 해당 입력만 루프에 전달되어 for파일을 삭제합니다.

답변2

해당 디렉터리로 변경한 후 이 작업을 수행할 수 있습니다. 처음 3자가 나타날 때마다 첫 번째 알파벳순 파일이 유지됩니다.

printf "%s\n" ???_?.pdb | awk -F_ 'seen[$1]++' | xargs echo rm --

echo테스트 후 제거하세요. 위 awk명령은 처음 3자가 이전 문자와 동일한 파일 이름만 필터링하여 삭제를 허용합니다.

관련 정보