Полезные советы и скрипты (упрощающие работу в консоли)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Полезные советы и скрипты

Сообщение /dev/random »

Предлагаю в эту тему выписывать свои интересные находки в области шелл-скриптинга и просто полезные скрипты.

Начну с собственного. Я это уже как-то в одной флеймовой теме приводил, но неплохо бы здесь продублировать.
Иногда в процессе работы (обычно при распаковке архивов) возникают файлы с невводимыми именами. Например, в неизвестной кодировке, или же просто "битые". Что с ними делать, как удалить/переименовать? Большинство для этого запускает mc или даже переключается в gui. Но это, во-первых, неудобно, а во-вторых, не всегда доступно.
Есть другое решение. Просто держите в своём bashrc такую функцию:

Код: Выделить всё

lsn() {
  while read num name
  do
    declare -g "LS$num=$name"
  done <<<"$(ls -A1 "$@" | cat -n | tee /dev/stderr)"
}

Эта функция выведет _пронумерованный_ список всех файлов в текущем (или в заданном) каталоге и присвоит их имена переменным LS1, LS2, ...
После этого ищем в списке "плохой" файл и вводим, скажем, rm "$LS12"

PS: вот уже два человека предложили один и тот же альтернативный вариант:

Shell

$ ls -i 70266797 filename $ find . -maxdepth 1 -inum 70266797 -delete

Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

Для поиска и удаления битых симлинков некоторые, как выяснилось, пишут целые скрипты, определяющие, является ли ссылка битой, с помощью утилиты file (см., например, здесь).
Однако можно поступить гораздо проще. Достаточно внимательно прочитать описание опции -L в man find.

find -L / -type l -exec rm -i {} \;

upd: И аккуратнее с /proc. Там по определению полно битых ссылок. Возможно, чем нажимать кучу раз n, будет удобнее добавить перед -exec'ом -not -path '/proc*'
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Полезные советы и скрипты

Сообщение drBatty »

/dev/random писал(а):
16.11.2009 12:48
Однако можно поступить гораздо проще. Достаточно внимательно прочитать описание опции -L в man find.

что-то в слаке 10.2 я не нашёл такой опции :(
/dev/random писал(а):
16.11.2009 12:48
upd: И аккуратнее с /proc. Там по определению полно битых ссылок. Возможно, чем нажимать кучу раз n, будет удобнее добавить перед -exec'ом -not -path '/proc*'

безусловно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

drBatty писал(а):
16.11.2009 14:27
что-то в слаке 10.2 я не нашёл такой опции :(

В самом начале секции OPTIONS идёт текст: "The -H, -L and -P options..."
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Полезные советы и скрипты

Сообщение drBatty »

/dev/random писал(а):
16.11.2009 14:32
В самом начале секции OPTIONS идёт текст: "The -H, -L and -P options..."

в 12йидёт, а в 10 вроде-бы не было :(
что-то у меня так не получилось...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные советы и скрипты

Сообщение t.t »

Кстати о "некоторые для этого пишут целые скрипты".. Вчера наткнулся на необходимость заменить все пробелы в именах файлов; проблема в том, что пробелы могут быть и в именах каталогов, потому простой find "* *" -print0 | xargs -0 rename 's/ /_/g' не сработает. И вспомнил, что когда-то я сам здесь об этом и писал (а изначально в той теме и был приведен скрипт на несколько строк):

Код: Выделить всё

find -name "* *" | sort -r | while read i; do mv "$i" "$(dirname "$i")/$(basename "$i" | tr ' ' _)"; done
Обратная сортировка гарантирует, что любое имя типа "dir/dir 2/file name" будет обрабатываться раньше, чем "dir/dir 2/".
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

t.t писал(а):
17.11.2009 11:36
Обратная сортировка гарантирует, что любое имя типа "dir/dir 2/file name" будет обрабатываться раньше, чем "dir/dir 2/".

Можно без обратной сортировки: в find есть опция -depth, предназначенная именно для этого.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Полезные советы и скрипты

Сообщение SLEDopit »

/dev/random писал(а):
17.10.2009 04:26
Что с ними делать, как удалить/переименовать?
а как же автодополнение?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

SLEDopit писал(а):
17.11.2009 13:57
а как же автодополнение?

Автодополнение не поможет, если из "вводимых" символов только пробелы.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные советы и скрипты

Сообщение t.t »

/dev/random писал(а):
17.11.2009 14:50
SLEDopit писал(а):
17.11.2009 13:57
а как же автодополнение?

Автодополнение не поможет, если из "вводимых" символов только пробелы.
Да даже если первые же различающиеся символы -- битые, уже не поможет. В частности, если битые первые символы имён.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
alexandrdors
Сообщения: 7
ОС: mandriva 2007 power pack

Re: Полезные советы и скрипты

Сообщение alexandrdors »

Быстрая установка Wembmin и его репозитория на CentOS (для последующего обновления вместе с системой)
Скопировать и вставить в терминал:

(echo "[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
enabled=1" >/etc/yum.repos.d/webmin.repo
rpm --import http://www.webmin.com/jcameron-key.asc
yum -y install webmin)

Взято отсюда.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Полезные советы и скрипты

Сообщение drBatty »

/dev/random писал(а):
17.10.2009 04:26
Иногда в процессе работы (обычно при распаковке архивов) возникают файлы с невводимыми именами.

Есть альтернативный вариант:
1) сначала смотрим какой inode у файла

Shell

$ ls -i 492024 TV.tar.bz2

2) затем ищем файл с таким inode, и удаляем/переименовываем/ещё чего-нибудь (я просто выполнил команду file)

Shell

$ find . -inum 492024 -exec file {} \; ./TV.tar.bz2: bzip2 compressed data, block size = 900k
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение ZyX »

/dev/random писал(а):
17.11.2009 14:50
SLEDopit писал(а):
17.11.2009 13:57
а как же автодополнение?

Автодополнение не поможет, если из "вводимых" символов только пробелы.

Зависит от оболочки и её настроек. У меня в zsh достаточно нажать два раза Tab
и добраться до нужного файла тем же Tab’ом или же стрелками.
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Полезные советы и скрипты

Сообщение QWERTYASDF »

А еще полезные рецепты будут? ☺
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Полезные советы и скрипты

Сообщение QWERTYASDF »

/dev/random писал(а):
17.10.2009 04:26
Иногда в процессе работы (обычно при распаковке архивов) возникают файлы с невводимыми именами. Например, в неизвестной кодировке, или же просто "битые". Что с ними делать, как удалить/переименовать? Большинство для этого запускает mc или даже переключается в gui. Но это, во-первых, неудобно, а во-вторых, не всегда доступно.
Есть другое решение. Просто держите в своём bashrc такую функцию:

Код: Выделить всё

lsn() {
  while read num name
  do
    declare "LS$num=$name"
  done <<<"$(ls -A1 "$@" | cat -n | tee /dev/stderr)"
}

Эта функция выведет _пронумерованный_ список всех файлов в текущем (или в заданном) каталоге и присвоит их имена переменным LS1, LS2, ...
После этого ищем в списке "плохой" файл и вводим, скажем, rm "$LS12"


Захотелось вот ради интереса наконец воспользоваться данной функцией.

Код: Выделить всё

$touch {file1,file2,file3}

$ls
file1  file2  file3

$lsn
     1  file1
     2  file2
     3  file3

$rm "$LS1"
rm: невозможно удалить «»: Нет такого файла или каталога

$echo $LS2 | wc -m
1


ЧЯДНТ?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

QWERTYASDF писал(а):
25.10.2015 02:26
Захотелось вот ради интереса наконец воспользоваться данной функцией.

Код: Выделить всё

$touch {file1,file2,file3}

$ls
file1  file2  file3

$lsn
     1  file1
     2  file2
     3  file3

$rm "$LS1"
rm: невозможно удалить «»: Нет такого файла или каталога

$echo $LS2 | wc -m
1


ЧЯДНТ?

Баш с тех пор, по-видимому, немного изменился. Теперь к declare нужно добавлять -g. Сейчас изменю пост.

PS: Вообще, странно. Мне почему-то сейчас кажется, что -g нужен был всегда, но я точно помню, что функцией я пользовался по назначению, и она работала.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Полезные советы и скрипты

Сообщение bormant »

Как по мне, проще "ls -i" плюс "find . -maxdepth 1 -inum ... -delete".
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение /dev/random »

bormant писал(а):
25.10.2015 10:51
Как по мне, проще "ls -i" плюс "find . -maxdepth 1 -inum ... -delete".

Поскольку вы уже не первый, кто это предлагает, вписал в стартовый пост.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2601
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение ormorph »

Скрипт предназначенный для отправления компьютер в спящий режим, и обеспечивающий его просыпание определенного числа в определенное время, и запускающий какое нибудь приложение либо скрипт при просыпании.
Для работы использует диалог yad либо zenity и утилиту rtcwake.
За выбор режима засыпания отвечает переменная SUSP, т.е. засыпание с сохранением на диск или с сохранением в оперативную память.

Код: Выделить всё

#!/bin/bash

#######
## Выбор режима засыпания
#######

#SUSP=$1

## Засыпание с сохранением в оперативную память.
#SUSP=mem

## Засыпание с сохранением на диск.
SUSP=disk

# Выбор диалога
#DIALOG=zenity
DIALOG=yad

ENV_CALLENDAR="$($DIALOG --calendar)"
if [ "$?" -eq "1" ] ; then exit 0
fi

MASS_DATE=($(echo $ENV_CALLENDAR|sed 's/\./ /g'))

tm="$($DIALOG --entry \
        --title="Время подъема!" \
        --text="Введите время формат 00:00" \
        --entry-text "00:00")"

if [ "$?" -eq "1" ] ; then exit 0
fi

# Проверка формата времени 16:41
if [[ "$tm" == [0-9]:[0-9][0-9] ]] || [[ "$tm" == [0-9][0-9]:[0-9][0-9] ]] ; then
    tm=$tm
else
    $DIALOG --info \
      --text="Неверный формат времени" &&
    exit 0
fi

date1=$(date -d "${MASS_DATE[1]}/${MASS_DATE[0]}/${MASS_DATE[2]} $tm" +%s)

if [[ $date1 > `date -u +%s` ]] ; then
    date=$(echo $[$date1-`date -u +%s`])
else
    $DIALOG --info \
      --text="Это время уже прошло!"
    exit 0
fi

# Выбор скрипта запуска
cd ~/bin
SCRIPTS="$($DIALOG --title="Выбор скрипта!" \
        --text="Выберите файл!" \
        --file-selection)"

if [ "$?" -eq "1" ] ; then
    SCRIPTS="$HOME/bin/tmplayer.sh"
fi

# засыпаем
sudo rtcwake -m $SUSP -s $date

$SCRIPTS

exit 0

После выбора даты и времени появляется диалог выбора файла скрипта, который будет запускаться при пробуждении, если нажать отмена, то по умолчанию используется скрипт запускающий случайную мелодию с постепенным увеличением громкости ~/bin/tmplayer.sh:

Код: Выделить всё

#!/bin/bash

# Выбор плеера
#PLAYER=mplayer
PLAYER=mpv

# Выбор диалога
#DIALOG=zenity
DIALOG=yad

# громкость
volume=10
volume_max=80

# Тут должен быть указан ваш каталог с музыкой!
folder=~/"Documents/MY/MUSIC/chingishan/"

player_start()

{
    # убиваем все процессы player-а
    kill -9 $(pidof $PLAYER) &>/dev/null
    # включаем случайную мелодию с бесконечным повтором
    if [ -z "$1" ] ; then
        $PLAYER -loop 0 -shuffle "$folder"* &> /dev/null &
    fi
}

# устанавливаем громкость
amixer -q set Master $volume%

player_start

# повышаем уровень громкости
for (( volume=$volume; volume<$volume_max; volume++ )); do
    amixer sset Master 1%+ &> /dev/null
    sleep 1 # задержка повышения громкости
done &

$DIALOG --info --text="Отключить будильник"

player_start false
exit 0


У меня этот скрипт навешен на отдельный пункт меню в Openbox, в последнее время использую с сохранением на диск, довольно хорошо помогает когда в Gentoo идет полная пере сборка мира, отправить комп в сон и пробудить в определенное время.

При желании можно выкладывать интересные скрипты обеспечивающие определенную автоматизацию, и которые можно использовать совместно с данным скриптом.
Зы: Утилите rtcwake должны быть даны права root, строчка

Код: Выделить всё

user ALL=NOPASSWD: /usr/sbin/rtcwake
в /etc/sudoers.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Разделение целых чисел на разряды в форматированном выводе
Недавно обнаружила спецификатор "апостроф" о котором и не подозревала.

Shell

printf "%'d\n" 1000000
1 000 000
awk 'BEGIN {printf "%\47d\n", 1000000}'
1 000 000
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3665
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Полезные советы и скрипты

Сообщение devilr »

Это в каком ЯП? У меня, в обычном C выводит 1000000
P.S. Хотя, в
olecya писала:
11.07.2020 11:46
awk 'BEGIN {printf "%\47d\n", 1000000}'
вполне работает. Занятно.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

devilr писал(а):
11.07.2020 12:26
Занятно.
Вот так еще интересней.

Shell

printf "%'d" 1111 | xxd
00000000: 31e2 80af 3131 31
Добавлено (13:20):

Shell

printf "%'d" 1111 | cat -vet
1M-bM-^@M-/111
printf "%b\n" "\xe2\x80\xaf" | cat -vet
M-bM-^@M-/$
Теряюсь в догадках что это за разделитель
Добавлено (13:49):
А так можно запятые вставить

Shell

LC_ALL="en_US" printf "%'d\n" 11111111
11,111,111
И это настоящие "ascii" запятые :rolleyes:
Добавлено (13:59):
Интересно numfmt ведет себя точно также

Shell

numfmt --g 1111 | xxd
00000000: 31e2 80af 3131 310a
LC_ALL="en_US" numfmt --g 1111 | xxd
00000000: 312c 3131 310a
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

olecya писала:
11.07.2020 13:14
Теряюсь в догадках что это за разделитель
NNBSP
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

@Bizdelnick Нашла еще тележку неразрывных пробелов, но возьму на вооружение этот

Shell

echo -en 1\\u202f111
1 111
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Не знаю на сколько это полезный совет для awk но для вызова команды или оболочки через env довольно интересно. Я одно время, после рекомендаций из книги Лутца по питону, настойчиво писала в скриптах ша бэнг в таком виде: #!/usr/bin/env bash
Потом во мне проснулась хозяйка. За все время я не встречала дистрибутивов где оболочка находилась бы в другом месте без ссылки в /bin/bash и я решила больше так не заморачиваться и в дальнейшем экономить на символах.
В статье на opensource сегодня встретила такую конструкцию ша бэнга в awk скрипте
:one:

Код: Выделить всё

#!/usr/bin/env --split-string=awk -F: -f
То есть мы вызываем awk вместе с его аргументами --field-separator и --file. Понятно что для awk скрипта пользы мало и читаемость от этого страдает но сама возможность распарсить строку на аргументы в ша бэнг может быть полезной.
С короткой опцией
:two:

Shell

cat test.awk
#!/usr/bin/env -S awk -F: -vOFS=, -f
{$2 = "zero"} 1

cat file
one:two:three

./test.awk file
one,zero,three
Последний раз редактировалось olecya 08.09.2020 20:47, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

olecya писала:
08.09.2020 12:35
я не встречала дистрибутивов где оболочка находилась бы в другом месте без ссылки в /bin/bash
*BSD ☺
olecya писала:
08.09.2020 12:35
такую конструкцию ша бэнга в awk скрипте
Не понял, как это должно работать. У меня env не знает опции -S, а ----split-string=awk — вообще ерунда какая-то.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Bizdelnick писал:
08.09.2020 19:43
*BSD
Да, по видимому встречала. Все дефолтные оболочки во FreeBSD имеют путь /bin, а вот bash я не устанавливала, но ksh93 разместился здесь /usr/local/bin/, а следовательно можно предположить что и bash установится в этот каталог безо всяких ссылок.
Bizdelnick писал:
08.09.2020 19:43
Не понял, как это должно работать. У меня env не знает опции -S, а ----split-string=awk — вообще ерунда какая-то.
Ну вот из мана debian bullseye и fedora 32, один к одному

Код: Выделить всё

 -S, --split-string=S
              process and split S into separate arguments; used to pass multiple arguments on shebang lines
Ну и пример работы скрипта в fedora 32 я показала
Добавлено (20:46):
Я поняла последнее замечание 4 дефиса, это опечатка. Исправляю
Есть в федоре неприятная особенность. Я в слепую набираю и даже не знаю, по какому то случайному нажатию удваивается набранный текст или курсор вдруг начинает бег по тексту или хуже того начинает стирать
Добавлено (20:59):
Даже во FreeBSD 12.1 работает, но там в env только короткая опция -S
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

olecya писала:
08.09.2020 20:32
из мана debian bullseye и fedora 32
Я проверял в ubuntu 18.04.

Вообще, зря Вы так делаете. Во-первых, как видите, это не переносимо даже на дистрибутивы с чуть более старой версией GNU coreutils, не то что на системы с другой реализацией env. Во-вторых, куда менее удобочитаемо, чем нормальный скрипт с нормальным определением FS и OFS. В-третьих, экономия нескольких байт не имеет ни малейшего значения, но если Вы как следует посчитаете, то обнаружите, что ничего и не сэкономили.
Надеюсь, не обидитесь, если дам Вам совет почитать «Практику программирования» Кернигана и Пайка. Очень помогает правильно расставлять приоритеты при работе с кодом.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Bizdelnick писал:
08.09.2020 21:16
Во-вторых, куда менее удобочитаемо,
Bizdelnick писал:
08.09.2020 21:16
но если Вы как следует посчитаете, то обнаружите, что ничего и не сэкономили.
olecya писала:
08.09.2020 12:35
Понятно что для awk скрипта пользы мало и читаемость от этого страдает но сама возможность распарсить строку на аргументы в ша бэнг может быть полезной.
Так и я об этом, даже умение прочесть такое уже будет не вредным. :)
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Все знают утилиту xargs. А вот опция -E остается обычно в тени, а ведь она может заменить даже sed:
-E eof-str. По простому "стоп слово" или скорее "стоп аргумент". Начиная с него последующие аргументы игнорируются.

Shell

mkdir test && cd test
echo 1 2 3 4 5 6 | xargs -E3
1 2
Выведем в столбик:

Shell

echo 1 2 3 4 5 6 | xargs -n1 -E3
1
2

Shell

echo $'one two\nthree four\nfive six' > file.txt
cat file.txt
one two
three four
five six
xargs -Efour -a file.txt
one two three
Не все знают что в утилите ls есть опция игнорирования файлов по шаблону. Обычно мы не замарачиваясь используем конвеер, например:

Shell

touch file{1,2}.txt
ls
file2.txt file3.txt file.txt
ls | grep -v '[0-9]'
file.txt
Да, с регулярными выражениями это гибче но во многих случаях глоббинг будет проще:

Shell

ls -I\*[0-9]\*
file.txt
Эта опция не ограничивается одним экземпляром и хорошо сочетается с "раскрытием скобок":

Shell

touch file.{doc,pdf,mp3}
ls
file1.txt file2.txt file.doc file.mp3 file.pdf file.txt
ls -I\*[0-9]\* -I\*.{pdf,doc,mp3}
file.txt
То есть в последнем случае баш раскроет скобочки и вызовет команду в таком виде:

Shell

ls -I'*[0-9]*' -I'*.pdf' -I'*.doc' -I'*.mp3'
Спасибо сказали:
Ответить