Команды разработчиков и администраторов компании, о которой вы говорите, связаны к perl, что восходит к зарождению исходной системной архитектуры, которую они использовали. Это привело к развитию корпоративной культуры, в которой предпочтение отдается Perl. Обратите внимание, что каждый раз, когда этот вопрос задают на форуме, вопрос начинается со слов «Я работаю в хостинговой компании, и все здесь говорят…» Просто погуглите «find vs. find2perl» и просмотрите результаты. Вы будете видеть одно и то же предисловие каждый раз, когда вас спросят. Вы не найдете никаких реальных доказательств того, что слухи верны, потому что их нет. Все слышали это от кого-то другого, кто слышал это от кого-то другого, кто слышал это от кого-то, кто просто отдает предпочтение Perl.
$
, пробел, '
и [
- специальные символы в большинстве оболочек. Чтобы удалить их особое значение, вы должны использовать механизмы цитирования оболочки.
Синтаксис кавычек очень сильно зависит от оболочки .
Во всех известных мне оболочках вы можете использовать одинарные кавычки, чтобы заключить в кавычки все символы, кроме одинарных кавычек, обратной косой черты и новой строки (в оболочках, подобных Bourne, они также заключают в кавычки последние два, за исключением обратных кавычек для \
в некоторых).
rm -r '$pattern'
Должно работать в наиболее распространенных оболочках.
rm -r \$pattern
Работает (кроме внутренних обратных кавычек для команд Борна) во всех оболочках, кроме семейства rc
.
То же самое для:
rm "\$option[value='2016']"
В rc
-подобных оболочках вы должны использовать:
rm '$option[value=''2016'']'
Если ничего не помогает, вы можете удалить файл на основе номера inode. Сначала перечислите все файлы в текущем каталоге с номерами inode
ls-il
, затем, используя первый номер распечатки для соответствующего имени файла, вы можете использовать следующую команду для удаления на основе номера inode
find . -inum [inode-number] -exec rm -i {} \;
Пример
$ ls -il
total 0
804743 -rw-r--r-- 1 staff 0 Nov 2 19:49 test1
804744 -rw-r--r-- 1 staff 0 Nov 2 19:49 test2
$ find . -inum 804743 -exec rm -i {} \;
remove ./test1? y
$ ls -il
total 0
804744 -rw-r--r-- 1 staff 0 Nov 2 19:49 test2
Вы просто экранируете символ, используя "\", это также обычная практика, используемая при написании запросов SQL в веб-приложениях, чтобы предотвратить выполнение других команд базы данных чем предполагалось.
Если каталог пуст:
rmdir \$pattern
В противном случае:
rm -r \$pattern
(Будет рекурсивно удален любой файл, содержащийся в папке)
{{1} } Когда вам нужно работать с файлом, который содержит специальные символы, можно использовать функцию автозаполнения bash: начните вводить свою команду (в данном случае rmdir
) а затем несколько раз нажмите Tab . Это будет циклически перемещаться по всем файлам / каталогам в текущем каталоге, автоматически экранируя все специальные символы.
Это также хорошо работает, если вы работаете с очень длинными именами файлов.