Linux에서 파일 1개와 디렉토리 1개를 제외하고 모두 제거

Linux에서 파일 1개와 디렉토리 1개를 제외하고 모두 제거

현재 내가 있는 디렉터리에서 파일 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 로 파이프 하거나 대신 쓸 수 있습니다 .-deletefind-prunexargsrm-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 {
}
}

관련 정보