파일 이름에 타임스탬프가 있는 폴더의 모든 파일 삭제

파일 이름에 타임스탬프가 있는 폴더의 모든 파일 삭제

파일 이름에 형식이 있는 폴더의 모든 파일을 제거해야 합니다 fcrjlog-11-21-2019-1.txt. 폴더에 이런 파일 이름을 가진 파일을 모두 제거하고 싶습니다.

답변1

 find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete

( 비표준 확장을 지원하지 않는 경우 -delete로 바꾸십시오 ).-exec rm -f {} +find-delete

?다음을 의미하는 와일드카드 연산자입니다.임의의 단일 문자. [[:digit:]]10진수 문자(0123456789)만 일치시키려면 다음 으로 바꾸십시오 .

! -type d다음 유형의 파일을 제외합니다.예배 규칙서( -delete어쨌든 비어 있지 않으면 제거할 수 없음), -type f훨씬 더 제한적으로 대체할 수 있습니다(만 포함).정기적인심볼릭 링크, 디렉토리, 소켓, fifo, 장치 등을 포함한 다른 모든 유형의 파일을 제외한 파일). GNU는 find또한 -xtype f결정된 파일을 선택하는 것을 지원합니다.정기적인심볼릭 링크 해결 후.

임의 개수의 문자, 비어 있지 않은 문자 시퀀스 또는 첫 번째 문자가 아닌 비어 있지 않은 문자 시퀀스 (숨겨진 파일 제외)를 일치시키려면 fcrjlog다음으로 바꾸십시오 .*?*[!.]*.

답변2

이미 시도한 것 중 일부를 표시하는 것이 관례입니다. 그렇게 하면 더 많은 응답을 얻을 수 있습니다. 이 질문의 경우 정규식을 조회하고 일부 개념을 이해해야 합니다. 타임스탬프의 "x"가 숫자라고 가정합니까? 그렇다면 다음 정규식을 사용하여 시작할 수 있습니다.

/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt

/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")

다양한 부분을 분석하면 다음과 같습니다.

"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{4}  -- Exactly four numeric characters
 -         -- A literal dash "-"
 [0-9]     -- One numeric character
 .         -- Any character.  Use \. to insist on a dot
 txt       -- The literal string "txt"
 $         -- An anchor that means the txt has to be at the end of the line
"

관련 정보