То, что Вы описали, является вариантом использования использования домашнего шифрования. Существует много уязвимых данных, хранивших в других областях, так шифрование домой действительно не дает Вам много защиты, но хорошо, это лучше чем ничего.
Недостатки довольно очевидны:
Находка может выполнить споры с -exec
опция для каждого соответствия это находит. Это - рекомендуемый механизм, потому что можно обработать пути с пробелами/новыми строками и другими символами в них правильно. Необходимо будет удалить содержание каталога, прежде чем можно будет удалить сам каталог, так использование -r
с rm
команда для достижения этого.
Для Вашего примера можно выйти:
find . -name ".svn" -exec rm -r "{}" \;
Можно также сказать, находят, чтобы просто найти каталоги названными .svn путем добавления a -type d
проверка:
find . -name ".svn" -type d -exec rm -r "{}" \;
Предупреждение использования rm -r
с осторожностью это удаляет папку и все ее содержание.
Если Вы хотите удалить просто пустые каталоги, а также каталоги, которые содержат только пустые каталоги, находка может сделать это само с -delete
и -empty
:
find . -name ".svn" -type d -empty -delete
Вот является портативное устройство еще быстрее, чем принятый ответ путем.
Используя a +
вместо точки с запятой как find
разделитель команды оптимизирует использование ЦП. Это может быть значительно, если у Вас есть много из .svn
подкаталоги:
find . -name .svn -type d -exec rm -rf {} +
Обратите внимание также, что never1 необходимо заключить фигурные скобки в кавычки здесь.
1, Если Вы не используете fish
оболочка.
+
действительно уменьшает использование ЦП, Используя ;
не приводит к команде слишком длинную ошибку.
– jlliagre
22.03.2017, 14:26
Bash определенное решение:
shopt -s globstar
rm -r **/.svn
shopt -u globstar #optional. this will disable globstar expansion
bash: /bin/rm: Argument list too long
– Drav Sloan
09.09.2013, 13:06
Если вы хотите что-то дерзкое, что просто печатает шестнадцатеричные данные, как они появляются Вы можете использовать сценарий perl:
perl -e '$| = 1; $i = 1;
while(1){
sysread(STDIN,$ch,1) or exit;
printf "%02x%s",ord($ch),$i++%16==0?"\n":" ";
}'
И если вы действительно хотите читать до блока и запустить hexdump:
perl -e '$| = 1; $i = 1; $rin = ""; vec($rin, fileno(STDIN), 1) = 1;
open(F,"|hexdump -C") or die;
while(1){
$nfound = select($rout=$rin, undef, undef, 0);
if($nfound==1){
sysread(STDIN,$data,999) or exit;
syswrite(F,$data) or die;
}else{
close(F);
open(F,"|hexdump -C") or die;
select($rout=$rin, undef, undef, undef);
}
}'
-121--100468- ключи Fluxbox должны поддерживать такое поведение; однако я также заметил некоторые нарушения при попытке сложных действий. Я смог добиться этого, используя следующее:
OnDesktop Mouse1 :If {Matches (Name!=)} {RootMenu} {HideMenus}
Хотя модель сопоставления кажется грубой, она, кажется, работает. У меня не было времени, чтобы выяснить, почему эта работа с Fluxbox, но я просто ожидал, что проверенные свойства (не) установлены, когда меню Fluxbox активно.
Надеюсь, это сработает для вас (или, по крайней мере, для начала). Если вы найдете лучший шаблон состояния для применения, мне было бы любопытно увидеть его.
-121--195353-На моем компьютере при использовании:
find . \( -name dirname -type d \) -exec rm -r '{}' ';'
Каталоги удалены, но я получаю ошибку
find: ‘./dirname’: No such file or directory
для каждого каталога.
Мои каталоги не пусты, поэтому параметр -delete не будет работать для меня. Я нашел причину такого поведения здесь :
- find принимает (не обязательно) первую запись в каталоге ./. например, dir.1/
- он сравнивает его с шаблоном "dir.?". он совпадает? да.
- Поиск выполняет "rm -r dir.1."
- find пытается ввести dir.1/, чтобы найти шаблон в каталоге. он ничего не знает о команде exec.
- он больше не находит dir.1/. возвращает ENOENT (посмотрите на вывод строки)
Я использовал это вместо того, чтобы работать вокруг:
rm -r `find . -name dirname -type d`
Имейте в виду, что находка все равно попытается рекурсировать в каталоги с именем dirname, что на самом деле не нужно и займет некоторое дополнительное время. В зависимости от структуры каталога можно обойти эту проблему с помощью опции поиска --depth
. Кроме того, если у вас есть структура каталогов, такая как dirname/foo/dirname, вы получите от rm ошибки "Нет таких файлов или каталогов". Для подавления ошибок можно перенаправить stderr на/dev/null или использовать флаг -f
(force) с rm.
Более быстрый способ сделать это:
find . -name ".svn" -type d -prune -exec rm -rf '{}' '+'
Если у вас есть «.svn» внутри другого «.svn».
Я обнаружил, что действие -delete
прекрасно работает с тестом -path
. Например, с исходной проблемой плакатов должно работать следующее:
find . -path '*/.svn*' -delete
-type
после-name
в командах находки, начиная с вызовов кstat
для получения типа являются дорогими. Я просто попробовал его сам на довольно большом наборе файлов, и это, кажется, верно: выполнениеfind . -name 'foo' -type d
взял 19 secs, в то время какfind . -type d -name 'foo'
взял 32 secs. Таким образом, приблизительно на 50% более длительное время для выполнения-type
сначала. – spinup 16.03.2015, 18:37find
хочет видеть в той папке для других соответствий, в то время как она удаляет папку одновременно. ~I еще не знают, как зафиксировать это. ~ Грязная фиксация:find . -name "folder-to-delete" -print0 | xargs -r0 -- rm -r
– Charlie 20.07.2016, 15:02-depth
аргумент фиксирует это:find . -depth -name ".svn" -type d -exec rm -r "{}" \;
– gimboland 27.07.2016, 10:57