재귀 rm이 작동하지 않습니다

재귀 rm이 작동하지 않습니다

디렉토리에 다음 파일이 있다고 가정합니다.

test.txt
test.txt~
/subdir
  test1.txt
  test1.txt~

rm -r ./*.*~최상위 디렉토리에서 실행 하면 test.txt~만 삭제됩니다.

재귀 플래그를 사용하고 있는데 왜 재귀 삭제를 수행하지 않습니까?

다음 스크립트를 사용하여 내 사례를 재현할 수 있습니다.

#create dir and 1-st level test files
mkdir dir
cd dir
touch test.txt
touch test.txt~

#create subdir and 2-nd level test files
mkdir subdir
cd subdir/
touch test1.txt~
touch test1.txt

cd ..
rm -r ./*.*~

답변1

귀하의 것 rm -r *.*~( 과 동일 )은 일치하는 파일 및 디렉토리, 즉 이름에 점이 포함되고 다음으로 끝나는 파일 및 디렉토리를 rm -r ./*.*~삭제합니다.*.*~~

그런데 subdir포인트가 하나도 없어서 맞지 않네요.

읽다글로벌(7)/bin/rm다음을 수행하는 것은 쉘(프로그램이 아님!)이라는 점을 기억하십시오 .와일드카드.

그러면 rm -r ./*.*~쉘에 뭔가를 입력하면 무슨 일이 일어날까요? 귀하의 쉘은 이것을 로 확장하고 다음 을 호출하여 rm -r ./test.txt~;/bin/rm$PATH포크(2)자식 프로세스를 생성한 다음실행(2)/bin/rm프로그램 에서 매개변수 배열 은 보이지도 않게 rm -rf ./test.txt~되어 있습니다.rm./subdir

바로 아래 하위 디렉터리에 있는 모든 백업 파일을 삭제하려면 rm */*.*~;최근의 bash(버전 4 이상), zsh파일 트리 깊은 곳에 있는 백업 파일을 삭제할 수도 있습니다.rm **/*.*

셸이 수행하는 작업을 이해하는 한 가지 가능한 방법은 rm명령(예: )을 echo.에코(1), echo일부 옵션이 알려져 있기 때문입니다(예: -n). 일부 좋은 껍질에서는 tab키를 사용할 수도 있습니다.자동 완성. 나는 그것을 사용하고 있다다루기 힘든자동 완성 기능이 마음에 들기 때문에 대화형 셸로 사용했습니다.

마지막으로,방(1)이해하세요 -i(삭제하기 전에 대화형으로 물어보세요). 그래서 내가 제안할게rm -i **/*~

그건 그렇고, 버전 제어 시스템에 대해 모른다면 이제 배울 시간입니다.자식....), 특히 파일(C 또는 Python 프로그램, 셸 스크립트 등...)과 같은 "소스" 코드의 경우 파일을 백업할 필요가 없습니다.

답변2

*.*~.어떤 디렉터리로도 확장되지 않으며, 현재 디렉터리에 있고 다음으로 끝나는 파일이나 디렉터리 만 일치합니다.~

~현재 디렉토리에서 끝나는 모든 파일을 찾으려면 다음 find과 같은 것을 사용합니다.

find -type f -name '*~' -delete

관련 정보