Рекурсивный rm у меня не работает

в основном, вы не можете. Прочитайте эту статью, под названием: Task_killable: Новое состояние процесса в Linux . Выдержка

Ядро 2.6.25

Linux® 2,6.25 ввело новое состояние процессов для процессов спать под названием Task_killable, который предлагает альтернативу эффективным, но потенциально незамедлительным заданным task_uniNTERREBRESTIMAL и простым в пробуждении, но более безопасную задачу.

Это так q & a под названием: Что такое непрерывный процесс? также объясняет его.

Я обнаружил это в этой очень интересной книге под названием: Интерфейс программирования Linux: Linux и Unix System Programming .

0
07.08.2015, 20:12
2 ответа

*. * ~ не расширяется ни в какие каталоги, он просто будет соответствовать любому файлу или каталогу в текущем каталоге, имеющему . где-то в нем и оканчивается на ~

Если вы хотите найти все файлы, которые заканчиваются на ~ из каталога, в котором вы находитесь, я бы использовал find как

find -type f -name '*~' -delete
5
28.01.2020, 02:13

Ваш rm -r *. * ~ (так же, как rm -r ./*.*~) удалит файлы и каталоги, соответствующие *. * ~ , то есть файлы и каталоги, имена которых содержат точку и оканчиваются на ~

Но подкаталог не содержит точек, поэтому не подходит.

Прочтите glob (7) и помните, что это ваша оболочка (а не программа / bin / rm !), Которая выполняет подстановку .

Итак, вы набираете rm -r ./*.*~ в свою оболочку. Ваша оболочка расширяет это до rm -r ./test.txt~; затем он находит программу / bin / rm в вашем $ PATH , вызывает fork (2) для создания дочернего процесса, а затем execve ( 2) в программе / bin / rm с массивом аргументов rm -rf ./test.txt~, поэтому rm даже не видит ./ subdir

Чтобы удалить все файлы резервных копий в любом прямом подкаталоге, введите rm * / *.* ~ ; с недавним bash (версия 4 или новее) и zsh вы можете удалить любой файл резервной копии даже глубоко в дереве файлов с помощью rm ** / *. *

Возможный способ понять, что делает оболочка, - это заменить вашу команду (например, rm ) на echo . Это должно дать вам расширение (но прочтите echo (1) , поскольку echo понимает некоторые параметры, такие как -n ). В некоторых хороших оболочках вы даже можете использовать клавишу tab для автозаполнения . Я использую zsh в качестве интерактивной оболочки, потому что мне нравятся ее функции автозаполнения.

Наконец, rm (1) знает о -i (интерактивно спрашивает вас перед удалением). Поэтому я предлагаю rm -i ** / * ~

Кстати, если вы не знаете о системах контроля версий, пора их изучить (я настоятельно рекомендую использовать git ....), особенно для «исходного» кода, такого как файлы (программы C или Python, сценарии оболочки и т. д. и т. д.), и вам не понадобятся файлы резервных копий.

6
28.01.2020, 02:13

Теги

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