이 디렉토리에는 /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자가 이전 문자와 동일한 파일 이름만 필터링하여 삭제를 허용합니다.