Для удаления скрытых файлов необходимо указать:
rm -r images/* images/.*
С оболочками, шарики которых включают .
и ..
, это приведет к ошибке как
rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'
но это удалит скрытые файлы.
Подход без errormessage должен использовать, находят/удаляют с mindepth. Это - находка гну.
find images -mindepth 1 -delete
Вашей находке может недоставать -mindepth
или -delete
предикат, в этом случае, Вы могли сделать:
find images/. ! -name . -prune -exec rm -rf {} +
[2-57]
набор символов, состоящий из 2
, 3
, 4
, 5
и 7
, в zsh и любом подстановочном знаке и regexp синтаксисе там. Ваш шаблон шарика *[2-57]
соответствует каждому имени файла, последний знак которого является одной из тех пяти цифр.
Я думаю, что Вы - misremembering синтаксис [m,n]
спецификатор шарика. Спецификаторы шарика всегда входят в круглые скобки в конце шаблона, и разделитель диапазона является запятой. Шаблон *([2,57])
расширяется до 2-го, 3-го, …, 57-е соответствия. Порядок расширения по умолчанию является лексикографическим (с некоторым специальным волшебством отсортировать числа в числовом порядке, если numeric_glob_sort
опция установлена); можно управлять им с o
или O
спецификатор шарика (например. *(om[2,57])
соответствовать 57 новым файлам кроме одного нового файла).
for x in /foo/bar/*([2,57]); do print $x; done
Не, что Вы попросили, но связали и возможно полезный для будущих читателей: если Вы хотите перечислить файлы 2 - 57, существуют ли они или нет, можно использовать выражение фигурной скобки диапазона. Эта функция также существует в ударе и ksh.
echo hello{2..57}
И если Вы хотите соответствовать файлам, имя которых содержит число между 2 и 57, можно использовать шаблон <2-57>
. Это характерно для zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Обратите внимание что шаблон как *<2-57>
вероятно не сделать то, что Вы ожидаете, потому что *
мог соответствовать цифрам также. Например, file58
соответствия *<2-57>
, с file5
соответствие *
часть и 8
соответствие <2-57>
часть. Шаблон *[^0-9]<2-57>
избегает этой проблемы.
но zsh, по-видимому, думает, что я прошу файлы 2 - 5 (или что-то как этот) вместо файлов 2 - 57. Какие-либо мысли, почему?
Поскольку []
скобки указывают на список подобранных символов (который может быть цифрами), не числа, интерпретируемые математически. Такой шаблон подобран против отдельного символа. Список может содержать диапазоны, но цифр или букв. [2-57]
соответствие расширяется до "Всех цифр в диапазоне от 2 до 5 и 7".
Для соответствия числам от 2 до 57 было бы легче использовать выражение последовательности вместо globbing шаблона (или вместе с таким):
for x in /foo/bar/*{2..57}; do print $x; done
Править: Но это, к сожалению, не даст Вам лексикографическое распоряжение всех перечисленных файлов - они были бы сгруппированы общими окончаниями числа, должными окружать расширение.
[]
печатал вещи в порядке..
– Amelio Vazquez-Reina
19.11.2011, 01:34
[2-57]
корректно, но я не думаю {2..57}
(это - то, что Вы имели в виду, правильно?) относится для того, что intrpc хочет сделать, который является “выбором файлы 2 - 57 в лексикографическом порядке”.
– Gilles 'SO- stop being evil'
19.11.2011, 03:40
if you want to enumerate files 2 to 57 whether they exist or not, you can use a range brace expression
. Если бы файлы не существуют и нет никаких соответствий, как расширение фигурной скобки знало бы, как расшириться? (как это расширилось бы по-другому по сравнению со спецификатором шарика?) – Amelio Vazquez-Reina 25.11.2011, 23:52foo{8..11}bar
расширяется доfoo8bar foo9bar foo10bar foo11bar
. Этот бит расширения не связан с именами файлов. Точно так жеfoo{eight,nine,ten,eleven}bar
расширяется доfooeightbar fooninebar footenbar fooelevenbar
. Это - расширение фигурной скобки в ksh/bash/zsh. – Gilles 'SO- stop being evil' 25.11.2011, 23:55