Как сопоставить только файлы точек в bash? [дубликат]

Поскольку эти значения всегда являются целыми числами, вы можете сделать что-то вроде:

cut $(awk 'NR>1{for(i=2;i<=NF;i++) s[i]+=$i}END{printf("%s", "-f 1");
for (i=2;i<=NF;i++) {if (s[i]) printf(",%s", i)}}' infile) infile

это читает файл дважды: awk получает номера столбцов, сумма которых не равна нулю; затем они используются с вырезом для печати только требуемых столбцов.

2
18.10.2018, 12:28
5 ответов

Так и должно быть:

rm -rf.[^.].??*  

Эта команда может перехватывать все случаи.

.[^.]поймает любые два ввода символов. .??*будет соответствовать только именам файлов длиной более 3 символов.

4
27.01.2020, 21:49

Необходимо исключить одиночные и двойные точки:

rm -rf {..?,.[!.]}*
  • ..?*соответствует всему с двумя точками, за которыми следует что-либо
  • .[!.]*сопоставляет все с одной точкой, за которой не следует другая точка
1
27.01.2020, 21:49

Сextglob:

$ shopt -s extglob
$ touch....a.bbb..c foo
$ echo.!(.|)
....a.bbb..c

!(.|)соответствует чему угодно, кроме точки или пустого места, поэтому .!(.|)соответствует всему, что начинается с точки, кроме .и ...

1
27.01.2020, 21:49

Мне кажется, у @Goro самый простой и абсолютно правильный ответ. Тем не менее, я считаю, что это больно печатать. Вместо этого я бы предложил

ls.??*

Совершенно верно, что при этом будут пропущены такие файлы, как .a, но они настолько необычайно редки, что на практике я не думаю, что это имеет значение, особенно для интерактивного использования.

2
27.01.2020, 21:49

С findнабирать немного больше, но вы можете быть более явным, что облегчает понимание:

find. -maxdepth 1 -name '.*' ! -name. ! -name.. -exec rm -rf {} +

Это вызывает rm -rfсо всеми именами в текущем каталоге (только ), который начинается с точки и не является ни ., ни ... Я не использую здесь -delete, так как этот предикат не может удалять не пустые каталоги -.

Если вы хотите сопоставлять только обычные файлы в текущем каталоге, это становится еще проще:

find. -maxdepth 1 -type f -name '.*' -delete

Здесь нам не нужно исключать .или .., так как они автоматически исключаются -type f.

Измените -type fна ! -type d, чтобы удалить любой каталог, отличный от -, (, то есть символические ссылки и т. д.)

1
27.01.2020, 21:49

Теги

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