폴더_1
./a20160606_000000_000021.txt 5KB
./a20160606_000000_000062.txt 5KB
./a20160606_000000_000531.txt 5KB
./a20160606_000000_004521.txt 5KB
./a20160606_000000_003211.txt 9KB
./a20160606_000000_009451.txt 9KB
./b20160606_000000_000001.txt 4KB
./b20160606_000000_000311.txt 6KB
./b20160606_000000_000632.txt 8KB
./b20160606_000000_000008.txt 9KB
./b20160606_000000_000034.txt 12KB
./b20160606_000000_000245.txt 12KB
./b20160606_000000_000333.txt 12KB
폴더_2
./a20160607_000000_000001.txt 9KB
./a20160607_000000_000002.txt 9KB
./a20160607_000000_000311.txt 9KB
./a20160607_000000_000500.txt 9KB
./a20160607_000000_001121.txt 9KB
./a20160607_000000_004891.txt 9KB
./b20160607_000000_000021.txt 5KB
./b20160607_000000_000065.txt 5KB
./b20160607_000000_000091.txt 5KB
./b20160607_000000_000134.txt 12KB
./b20160607_000000_000521.txt 12KB
./b20160607_000000_001111.txt 12KB
각 폴더에는 위의 파일이 포함되어 있습니다. 각 파일의 크기는 오른쪽에 표시됩니다(folder_1과 Folder_2는 동일한 폴더에 있음). 내 질문은 이러한 중복 파일을 제거하는 방법이며 find
파일은 각 파일 중 가장 큰 파일이어야 합니다. 출력은 다음과 같아야 합니다.
폴더_1
./a20160606_000000_009451.txt 9KB
./b20160606_000000_000333.txt 12KB
폴더_2
./a20160607_000000_000001.txt 9KB
./b20160607_000000_001111.txt 12KB
답변1
귀하의 질문에 엄격하게 답변하기 위해 파일 이름을 기준으로 중복된 파일이 없습니다.
파일 이름의 첫 번째 부분을 기준으로 가장 큰 파일을 유지하려면 다음 awk
스크립트를 사용하여 접두사(a20160606, a20160607 등)를 기준으로 가장 큰 파일이 아닌 파일 이름(및 해당 크기)을 가져올 수 있습니다. 첫 번째 밑줄 앞에 ):
find . -maxdepth 1 -type f -printf "%f %s\n"| awk '{
NAME=substr($1,0,9)
SIZES[$1]=$2
if ($2 > MAX[NAME]) {
MAX[NAME]=$2
}
}
END {
for (x in SIZES) {
for (y in MAX) {
if (match(x,y) && SIZES[x] != MAX[y]) {
printf "%s %d\n", x, SIZES[x]
}
}
}
}'
발견된 가장 큰 값의 이름(및 크기) 목록을 얻으려면 다음을 사용하십시오.
find . -maxdepth 1 -type f -printf "%f %s\n"| awk '{
NAME=substr($1,0,9)
SIZES[$1]=$2
if ($2 > MAX[NAME]) {
MAX[NAME]=$2
}
}
END {
for (x in SIZES) {
for (y in MAX) {
if (match(x,y) && SIZES[x] == MAX[y]) {
printf "%s %d\n", x, SIZES[x]
}
}
}
}'
이를 수행하는 더 쉬운 방법이 있을 수 있지만 삭제할 파일 목록을 얻는 데 도움이 될 수 있습니다.