parts = grep "/root/backups/*"
for part in $parts
do
echo $part
rm -rf $part #delete
done
기본적으로 폴더를 반복하고 Bash 스크립트를 사용하여 폴더의 모든 항목을 반환해야 합니다.
훨씬 간단한 방법일 수 있지만 grep을 통해 작업할 수 없습니다. 첫 번째 줄은 순수한 의사-단서 없는 코드입니다.
답변1
이는 반복 없이 쉽게 수행할 수 있습니다.
파일을 제거하려면 rm을 사용하십시오.
$ rm -rf /root/backups/*
파일을 삭제할 때 파일 이름을 표시하려면 대신 find를 사용하십시오.
$ find /root/backups -maxdepth 1 -mindepth 1 -print -exec rm -rf {} \;
-maxlength 옵션은 find가 시작 지점인 /root/backups에서 한 수준 이상 내려가지 않도록 지시합니다. -minlength 옵션은 find에게 결과 반환을 시작할 위치를 알려주고, find가 시작점을 무시하도록 효과적으로 지시합니다. -print 옵션은 발견된 파일을 화면에 인쇄합니다. -exec를 사용하면 {}가 발견된 파일로 대체되므로 rm을 호출하여 해당 파일을 삭제합니다.
편집: 주석당 불필요한 -exec를 제거했습니다.
답변2
grep 명령을 다음으로 변경합니다.
for i in ``ls -bRC1 /path/*
; echo $i 를 하세요; rm $i ; 완료
-b는 rm에서 오류나 의도하지 않은 결과를 초래할 수 있는 공백 및 기타 문자를 이스케이프합니다. -R은 재귀적입니다. -C1은 단일 열입니다(중복될 수 있음). -rf를 다시 고려하겠습니다.
for 루프 대신 find를 사용할 수도 있습니다.
find /path -H -maxdepth 3 -type f -mtime +7 -exec rm {} \; -ls
위 옵션의 의미를 모르는 경우 를 입력하세요 man find
.
답변3
grep -l은 파일 이름만 제공합니다.
부품 = grep -rl ....
답변4
특정 디렉토리에 있는 파일 이름 목록을 원합니다. 이 작업을 수행하는 프로그램이 있는데, 그 이름을 읽기가 부끄럽습니다: ls
. 그게 전부입니다! 하위 디렉토리의 파일을 포함하는 재귀적 목록을 원하므로 ls -R
. 그 출력을 스크립트의 변수에 넣고 원하는 대로 수행할 수 있습니다.