На самом деле эта ошибка не имеет никакого отношения к Perl. bzr
клиент командной строки для распределенной системы управления версиями Базара. По-видимому, Ваша установка Bugzilla в репозитории Базара. Emacs обнаруживает это автоматически и пытается активировать свой режим управления версиями, но Вы не имеете bzr
клиент установлен. Emacs не подготовлен к той ситуации. Это на самом деле загружало файл, который Вы запросили; это просто не переключилось на тот буфер автоматически. (И Вы, вероятно, получите больше ошибок, при попытке отредактировать буфер.)
Можно установить bzr
пакет, или находят .bzr
каталог и переименовывает его так, Emacs не обнаружит его или настроит vc-handled-backends
переменная в Emacs для удаления Bzr
из списка.
Воссоздание каталога кажется довольно простым способом сделать это.
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});
}
}
Передайте каталог первым, а имя - вторым. Это больше не однострочная оболочка, но она работает, не уничтожает каталог и не выдает никаких ложных предупреждений.
rm -rf MyTargetDir && mkdir MyTargetDir
Он должен делать то, что вы пытаетесь сделать.
Без сомнения, есть более удобные способы сделать это, но это должно работать:
for MyTargetDir in `find /data1 -name MyTargetDir -type d -depth`
do
if [ $MyTargetDir != "" ]; then
rm -rfvi $MyTargetDir/*
fi
done
Оператор if
требуется в случае, если вы никогда не найдете каталог, который ищете в этом случае команда rm
уничтожит вашу корневую файловую систему. По этой причине, на случай, если в том, что я написал, есть ошибка, я также указал параметр i
, чтобы вы получали предупреждение перед тем, как команда начнет удаление файлов; как только вы убедитесь, что он работает должным образом, вы можете удалить параметр i
.
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, так что она не сможет удалить каталоги.
Не могу придумать способ расширить глобус в -exec
, но помещение его в подоболочку должно работать.
find /data1 -name MyTargetDir -type d -exec bash -c 'shopt -s dotglob; rm -rv "{}"/*' \;