다음 명령을 사용하여 내 서버에서 대량의 메일을 삭제하려고 합니다. (주로 메일이 전송되지 않습니다.)
rm -rf /home/*/mail/new/*
나는 점점-bash: /usr/bin/rm: Argument list too long
찾기를 사용해 보았습니다.
find /home/*/mail/new/ -mindepth 1 -delete
하지만 20분이 지나도 아무 일도 일어나지 않는 것 같습니다.
for 루프를 사용하여 그 안에 있는 모든 것(디렉터리, 파일, 도트 파일)을 삭제하는 방법/home/*/mail/new/
이 같은
for f in /home/*/mail/new/*.*~; do
# if it is a file, delete it
if [ -f $f ]
then
rm "$f"
fi
done
파일과 폴더 및 그 안의 모든 내용을 삭제하려면 이 명령을 다시 작성하도록 도와주세요./home/*/mail/new/
편집: 내 질문은 FOR 루프 내에서 이 작업을 수행한다는 점에서 독특합니다.
답변1
문제는 /home/*/mail/new/*
너무 많은 파일 이름으로 확장된다는 것입니다. 가장 간단한 해결책은 디렉터리를 삭제하는 것입니다.
rm -rf /home/*/mail/new/
또는 find
명령을 사용하십시오. 가능해야 하지만 속도가 느려집니다.
또는 디렉토리가 필요한 경우 new
루프를 사용하여 해당 디렉토리를 찾고 삭제하고 다시 생성하십시오.
for d in /home/*/mail/new/; do
rm -rf "$d" && mkdir "$d"
done
작성하려는 루프(하지만 사용하지 마십시오. 매우 느리고 비효율적입니다)는 다음과 같습니다.
for f in /home/*/mail/new/* /home/*/mail/new/.*; do
rm -rf "$f"
done
모든 것을 삭제하려면 파일을 테스트할 필요가 없습니다. rm -rf
동일한 명령을 사용하여 디렉터리와 파일을 모두 삭제하면 됩니다. 삭제할 수 없다고 불평 .
하지만 ..
무시할 수 있습니다. 또는 매우 깨끗하고 오류를 방지하려면 bash에서 다음을 수행할 수 있습니다.
shopt -s dotglob
for f in /home/*/mail/new/*; do
rm -rf "$f"
done