두 파일 이름을 비교하는 방법

두 파일 이름을 비교하는 방법

폴더에 있는 두 파일을 비교하고 이름에서 더 작은 숫자를 제거하고 싶습니다.

예를 들어 이름이 이라고 가정해 보겠습니다 yearMonthDay.txt. sudo rm어느 숫자가 더 작은지 비교 하고 싶습니다 .

다음을 통해 전화번호를 받을 수 있다는 것을 알고 있습니다.

find *txt | awk -F'[_.]' '{ print $1}'

그럼 다음에는 어떻게 비교해야 할까요? 시스템 변수를 사용하시겠습니까? 사실 저는 이전에 쉘 변수를 사용해 본 적이 없습니다.

답변1

다음을 수행하는 것이 좋습니다.

"일반적인" 날짜와 유사한 이름을 가진 일부 파일이 있는 디렉터리를 만들었습니다. 하나는 이름에 공백이 있고(인용해야 함) 이름에 개행이 있는 파일입니다(명령이 구분된 파일을 사용하는 경우 개행이라고 가정).

$ find
.
./20210710.txt
./20200131.txt
./20210611.txt
./2020?0131.txt
./20201131.txt
./2020 131.txt

다음 명령줄은 txt 파일 목록을 작성 stat하는 데 사용됩니다.find

$ find -name '*.txt' -exec stat -c '%N' {} \;
'./20210710.txt'
'./20200131.txt'
'./20210611.txt'
'./2020'$'\n''0131.txt'
'./20201131.txt'
'./2020 131.txt'

이제 정렬하세요(확장 프로그램을 제거하지 않고도 이 작업을 수행할 수 있습니다).

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort
'./20200131.txt'
'./20201131.txt'
'./2020 131.txt'
'./2020'$'\n''0131.txt'
'./20210611.txt'
'./20210710.txt'

가장 오래된 것을 선택하십시오 (목록 상단에서)

$ find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1
'./20200131.txt'

이제 파일을 삭제할 수 있습니다

rm $(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)

공백이나 기타 특수 문자가 포함될 위험이 있는 경우 인용하고 싶습니다(단, 이전 인용문과 충돌하지 않도록 다시 확인하세요).

rm "$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)"

변수를 설정하고 나중에 쉘 스크립트의 명령에서 사용할 수도 있습니다.

#!/bin/bash

find -name '*.txt' -exec stat -c '%N' {} \; | sort

var1=$(find -name '*.txt' -exec stat -c '%N' {} \; | sort | head -n1)
echo '---'
read -p "Remove $var1? (y/N) " ans
if [ "$ans" == "y" ]
then
 eval rm "$var1"
fi

관련 정보