4

У меня было много файлов в папке, в которой я случайно запустил rm * перед прерыванием.

Похоже, что файлы, начинающиеся с a, b и c, исчезли, но я не уверен, так как я не знал названия всех файлов.

Могу ли я рассчитывать, что rm работает в алфавитном порядке, чтобы точно знать, какие файлы были удалены?

2 ответа2

7

rm не обязательно работает в алфавитном порядке, но работает в том порядке, в котором вы предоставляете его аргументы (с -r это становится более сложным, но здесь это не имеет значения). Если вы написали точно так, как вы сказали, * расширится до всех имен файлов в алфавитном порядке.

Так что да, вы удалили файлы в алфавитном порядке.

Попробуйте выполнить

echo *

в каталоге, чтобы увидеть, в каком порядке появляются вещи. Это тот же порядок, что rm * удаляет файлы.

1

Да они работают по алфавиту ..

Вы можете использовать команду strace для проверки последовательности и того, как ваше ядро работает внутри. Ниже приведена команда strace, которую я использовал для команды rm, она переводит * в алфавитную последовательность.

surendra@linuxnix.com:~/scripts/temp/temp $ strace rm -rf *

execve("/bin/rm", ["rm", "-rf", "a.txt", "b.txt", "c.txt", "d.txt"], [/* 43 vars */]) = 0

<- Я обрезал вывод ->

Где бы ни находился *, ваша оболочка bash будет пытаться выдать все комбинации в этом порядке. Некоторые другие команды, которые поддерживают это: cp, mv, find и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .