너무 긴 파일 이름을 모두 찾아서 디렉터리에서 삭제하려면 명령에 대한 도움이 필요합니다.

너무 긴 파일 이름을 모두 찾아서 디렉터리에서 삭제하려면 명령에 대한 도움이 필요합니다.

나는 다음 명령을 사용하고 있습니다 :

find . | awk 'function base(f){sub(".*/", "", f); return f;} \
{print length(base($0)), $0}'| sort -nr | head -2

파일 이름이 너무 긴 일부 파일을 찾을 수 있지만 전부는 찾을 수 없으며 삭제하지 않습니다.

이를 수행하려면 어떤 명령을 사용할 수 있습니까?

답변1

GNU가 있는 경우 find정규식을 사용하여 주어진 길이보다 이름이 긴 파일을 찾을 수 있습니다. 예를 들어, 다음은 이름이 20자 이상인 파일을 찾습니다.

find . -regextype egrep -regex '.*/[^/]{20,}$'

다음을 추가하여 이러한 파일을 삭제할 수 있습니다 -delete.

find . -regextype egrep -regex '.*/[^/]{20,}$' -print -delete

GNU가 없으면 다음을 find계산할 수 있습니다 ?.

find . -name '????????????????????*'

다음을 사용하여 파일을 삭제하십시오 -exec rm.

find . -name '????????????????????*' -type f -print -exec rm {} +

-type f파일만 일치하는지 확인하고 가능한 한 많은 파일을 한 번에 실행하도록 -exec rm {} +지시하십시오 . 또는 유형에 관계없이 모든 콘텐츠를 제거하려면 다음을 사용하세요.findrm

find . -name '????????????????????*' -print -exec rm -rf {} +

시리즈를 구성하려면 ?다음을 사용할 수 있습니다.

printf '%20s*' | tr ' ' '?'

(20자)이므로

find . -name "$(printf '%20s*' | tr ' ' '?')" -print -exec rm -rf {} +

답변2

42자를 초과하는 파일 이름을 제거하려면 find및 사용 :Perl

max=42
find . -print0 | perl -0sne 'unlink if length > $max' -- -max=$((max-2))

에서 perldoc -f unlink:

unlink는 파일 목록을 삭제합니다. 성공하면 성공적으로 삭제된 파일 수를 반환합니다. 실패하면 false를 반환하고 $!(오류 번호)를 설정합니다.

주의해서 사용하세요! 좋은 디렉터리에 있지 않으면 전체 시스템을 파괴할 수 있습니다.

리더는 ./2명의 캐릭터가 필요합니다. 그래서 -2쉘에서 뺄셈을 합니다.

관련 정보