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

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

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

답변1

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

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

?다음을 나타내는 와일드카드 연산자입니다.임의의 단일 문자. [[:digit:]]일치하는 십진수 문자(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
"

관련 정보