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