Как найти и освободить некоторые каталоги

На самом деле эта ошибка не имеет никакого отношения к Perl. bzr клиент командной строки для распределенной системы управления версиями Базара. По-видимому, Ваша установка Bugzilla в репозитории Базара. Emacs обнаруживает это автоматически и пытается активировать свой режим управления версиями, но Вы не имеете bzr клиент установлен. Emacs не подготовлен к той ситуации. Это на самом деле загружало файл, который Вы запросили; это просто не переключилось на тот буфер автоматически. (И Вы, вероятно, получите больше ошибок, при попытке отредактировать буфер.)

Можно установить bzr пакет, или находят .bzr каталог и переименовывает его так, Emacs не обнаружит его или настроит vc-handled-backends переменная в Emacs для удаления Bzr из списка.

3
01.08.2014, 01:57
5 ответов

Воссоздание каталога кажется довольно простым способом сделать это.

find /data1 -name MyTargetDir -type d -exec rm -rv {} \; -exec mkdir {} \;

Вместо этого вы можете использовать подоболочку в exec для запуска команды rm -rf * (или аналогичной) из каталога. Но это кажется еще большей проблемой, чем описанное выше. У вас есть побочный эффект очистки размера каталога, если это когда-либо было проблемой.

Как уже упоминалось, воссоздание каталога может оказаться слишком сложной задачей. Если так, альтернативой может быть:

find /data1 -name MyTargetDir -type d -exec bash "-c" "cd {} && rm -r -- * .*" \;

У этого есть досадная проблема скуления о попытках удалить "." и "..", но это должно быть безопасно.

В противном случае вы можете просто использовать полноценное скриптовое решение, такое как perl.

#!/path/to/perl
use strict;
use warnings;
use File::Find;
use File::Path qw/remove_tree/;

my ($dir_to_check, $name_to_remove) = @ARGV;
find(\&wanted, $dir_to_check);
sub wanted {
  if (-d and $_ eq $name_to_remove) {
    remove_tree($_, {keep_root => 1});
  }
}

Передайте каталог первым, а имя - вторым. Это больше не однострочная оболочка, но она работает, не уничтожает каталог и не выдает никаких ложных предупреждений.

1
27.01.2020, 21:43
rm -rf MyTargetDir && mkdir MyTargetDir

Он должен делать то, что вы пытаетесь сделать.

0
27.01.2020, 21:43

Без сомнения, есть более удобные способы сделать это, но это должно работать:

for MyTargetDir in `find /data1 -name MyTargetDir -type d -depth`
do
   if [ $MyTargetDir != "" ]; then
     rm -rfvi $MyTargetDir/*
   fi
done

Оператор if требуется в случае, если вы никогда не найдете каталог, который ищете в этом случае команда rm уничтожит вашу корневую файловую систему. По этой причине, на случай, если в том, что я написал, есть ошибка, я также указал параметр i , чтобы вы получали предупреждение перед тем, как команда начнет удаление файлов; как только вы убедитесь, что он работает должным образом, вы можете удалить параметр i .

0
27.01.2020, 21:43
rm -rf MyTargetDir && mkdir MyTargetDir

Он должен делать то, что вы пытаетесь сделать.

-121--116510-

Используйте Win32 Образ диска в Windows или dd для записи ISO на USB-накопитель в Linux/OSX.

dd if=CentOS-7.0-1406-x86_64-NetInstall.iso of=/dev/sdb bs=8m

Я недавно использовал первый, и после этого он загружался прекрасно.

-121--62017-

Или вы можете попробовать эту команду без параметра r в rm, так что она не сможет удалить каталоги.

-1
27.01.2020, 21:43

Не могу придумать способ расширить глобус в -exec , но помещение его в подоболочку должно работать.

find /data1 -name MyTargetDir -type d -exec bash -c 'shopt -s dotglob; rm -rv "{}"/*' \;
0
27.01.2020, 21:43

Теги

Похожие вопросы