
현재 내가 있는 디렉터리에서 파일 1개와 디렉터리 1개만 남기고 모두 삭제하고 싶습니다. 어떻게 해야 합니까?
a, b, c 세 개의 디렉토리와 1.php, 2.php, 3.php라는 세 개의 파일이 있는 디렉토리가 있습니다. a와 b 디렉토리는 물론 1.php와 2.php 파일만 제거하고 싶습니다. 나는 더 쉬운 방법으로 이 작업을 수행하는 솔루션을 찾고 있습니다. 더 많은 폴더와 파일을 포함하여 더 큰 규모로 사용할 수 있는 솔루션을 찾고 있습니다.
답변1
find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete
빠른 테스트 사례를 통해 적어도 이 정확한 사례에서는 작동하는 것으로 나타났습니다. eg 등의 하위 디렉터리가 있으면 c
제외할 수도 있을 것 같습니다. 일반적인 경우에 작동하게 하는 것은 쉽지만, 일반적으로 find 명령을 정의하려면 약간의 테스트가 필요합니다.
"-delete" 문 없이 테스트하여 일치하는 파일을 확인하세요.
PRESSTOP: 이 지정 find
되면 동작을 변경합니다 ( 이에 대해 경고하고 지정되면 계속되지 않습니다 ). 하지만 항상 출력을 and 로 파이프 하거나 대신 쓸 수 있습니다 .-delete
find
-prune
xargs
rm
-execdir rm {} \;
-delete
예:
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r
항상 까다로운 작업이므로 파일 삭제가 목표인 경우 광범위한 테스트 사례를 만드세요. 나는 밤마다 실행되는 유사한 s를 꽤 많이 가지고 있으며 find
, 그것들을 풀어주는 것이 긴장되지 않았다고 말할 수는 없습니다 :-)
답변2
내 직감은 이것이다. 저장할 파일과 디렉토리가 하나만 있다면 안전한 장소에 복사한 다음 나머지는 날려버리세요.
cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/
답변3
의사 Perl에서 다음 스크립트를 시도해 보십시오:
#request the file you don't want to delete and store the name in a scalar variable.
opendir(DIRHANDLE, ".") || die "Could not open Directory handle.";
@list = readdir(DIRHANDLE);
foreach $name (@list) {
if($name != $your_input_variable) {
unlink($name);} else {
}
}