패턴 일치를 사용하여 공백과 별표가 포함된 파일 제거

패턴 일치를 사용하여 공백과 별표가 포함된 파일 제거

프로그램이 제대로 실행되지 않기 때문에 내 홈 디렉토리에는 점으로 시작하고 공백과 별표를 포함한 이상한 기호가 포함된 파일이 많이 있습니다. 이 파일을 삭제하고 싶지만 삭제하는 데 문제가 있습니다. 이 질문은 다음과 유사합니다.공백과 구두점이 포함된 파일 이름 바꾸기, 하지만 더 나쁩니다. 수동으로 삭제하기에는 파일이 너무 많아서 패턴 매칭을 사용해야 합니다.

대부분의 파일은 다음으로 시작 .txt}하고 포함합니다 18Jun22h(디렉토리에는 이러한 문자열 중 하나를 계속 포함하고 싶은 파일이 없습니다). 디렉토리의 파일이 확실히 좋은 유닉스 이름이 아닌 경우 이 문자열이 포함된 모든 파일을 어떻게 삭제할 수 있습니까? 대신 점, 공백, 별표, 대괄호 및 대시가 포함됩니다. 내 초기 시도는 아마도 이름에 이러한 기호가 있기 때문에 실패했을 것입니다.

파일이 너무 많아서 하나씩 삭제하는 방법은 전혀 쓸모가 없습니다.


예, UNIX와 호환되지 않는 파일을 사용하지 않는 것이 더 낫다는 것을 알고 있습니다. 이것이 내가 지키는 규칙이기도 하다. 그러나 스크립트가 예상대로 작동하지 않습니다.


다시 생각해 보면 특정 시간 사이에 생성된 모든 파일(특정 디렉터리에 있음)을 삭제하는 것이 더 쉬울 수도 있습니다. 이에 대한 귀하의 도움에 진심으로 감사드립니다.


시스템: 페도라 27

나는 그것을 시도했지만 ~/*18Jun22h*인수가 너무 길다는 오류는 파일 이름의 * 확장 및 이상한 작업과 관련이 있다고 생각합니다. 대신, 이 패턴과 일치하는 파일이 너무 많기 때문입니다(맞죠?). (RM이 처리할 수 있는 파일 수에 상한선이 있다는 것을 몰랐습니다).

답변1

홈 디렉터리에 공백이 하나 이상 포함된 파일을 찾으려면(전용):

find "$HOME" -maxdepth 1 -type f -name '*[ ]*'

...다음 중 하나 이상을 포함합니다 *.

find "$HOME" -maxdepth 1 -type f -name '*[*]*'

...최소한 [또는 다음을 포함 ]:

find "$HOME" -maxdepth 1 -type f -name '*[\[\]]*'

...위 항목 중 하나가 포함되어 있습니다.

find "$HOME" -maxdepth 1 -type f -name '*[ *\[\]]*'

이러한 파일을 제거하려면 -delete명령 끝에 추가하거나 -exec rm {} +.


find지원되지 않는 시스템에서는 -maxdepth 1홈 디렉터리에서 실행하세요.

find . -type d ! -name . -prune -o -type f -name '*[ *\[\]]*' -print

답변2

.txt}이들 중 어느 것도 쉘에 특별한 것이 아니므로 (여는 중괄호 없음) 간단히 다음과 같이 하십시오.

rm ~/.txt}* ~/*18Jun22h*

또는 너무 많으면 나누어서 사용하세요.

rm ~/.txt}*
rm ~/*18Jun22h*

답변3

견적을 가져오고 내보낼 수 있습니다.

예를 들어 로 시작하는 파일을 삭제하려면 *다음을 실행합니다.

rm "*"*

echo먼저 연습해echo "*"*

답변4

방법 1:사용./

rm -f ./'file name'그리고rm -f ./'file*name'

방법 2:인덱스 노드 사용:

인덱스 노드 가져오기ls

ls -i "file name"

그 다음에

find . -inum "numberoofinode" -exec rm {} \;

관련 정보