2

Я хочу удалить все файлы, кроме 1 и 1, из каталога, в котором я сейчас нахожусь. Как мне это сделать?

У меня есть каталог, который имеет три каталога a, b, c и три файла 1.php, 2.php, 3.php. Я хочу удалить каталоги a и b, а также файлы 1.php и 2.php. Я ищу решение сделать это более простым способом. Я ищу решение, которое можно было бы использовать в более широком масштабе с большим количеством папок и файлов.

3 ответа3

3
find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete

Быстрый тестовый случай показал, что это работает, по крайней мере, именно в этом случае. Если есть подкаталоги, например c или такие, я думаю, вы можете исключить их. Легко заставить его работать в общих случаях, но для определения команды поиска во всех случаях требуется некоторое тестирование.

Проверьте без оператора "-delete", чтобы увидеть, какие файлы ему соответствуют.

PRESSTOP: команда find меняет свое поведение, если указан параметр -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

Это всегда непростое дело, и когда цель состоит в том, чтобы удалить файлы, проведите обширные тестовые случаи. У меня довольно много похожа find s работает по ночам, и я не могу сказать , что я не нервничал их установка бесплатно :-)

1

Попробуйте следующий скрипт в псевдо-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 {
}
}

1

Мой инстинкт такой: если у вас есть только один файл для сохранения и один каталог, скопируйте их в безопасное место, а затем удалите все остальные.

cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .