디렉토리에 다음 파일이 있다고 가정합니다.
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