- Преобразование exec в xargs в команде поиска

Судя по коду в https://github.com/zplug/zplug, эти сообщения отправляются zplug на стандартный вывод через printf, поэтому вы можете отключить их, изменив эту строку:

source ~/.zplug/init.zsh && zplug update

на этот:

source ~/.zplug/init.zsh && zplug update > /dev/null

Чтобы полностью запретить обновление, просто удалите команду обновления:

source ~/.zplug/init.zsh

2
30.08.2020, 16:35
2 ответа

Создайте скрипт в ~/binдля обработки списка файлов, назовите его doit, содержащий

#!/bin/bash
while [[ $# -ne 0 ]] ; do
    thisfile="$1"
    shift
    dos2unix -k -n "$thisfile" tmp_file
    mv tmp_file "$thisfile"
done

Затем,

chmod +x ~/bin/doit

И, наконец,

find /path/to/files -type f -print0 | \
    xargs -0 -r $HOME/bin/doit

Считать man find xargs bash.

1
18.03.2021, 23:10

На самом деле все гораздо проще. Вам не нужно вызывать оболочку или использовать mv, потому что dos2unixуже изменяет целевой файл, если вы не установите для него флаг -n.

find /path_to_files -type f -exec dos2unix -k -q -- {} +

-type fтак что find ищет только обычные файлы, а не каталоги. -qприсваивается флагу dos2unix, чтобы он не выводил информационные сообщения на стандартный вывод. И мы используем {} +вместо {} \;, чтобы find не вызывал один процесс dos2unixдля каждого найденного файла, а вместо этого отдавал столько файлов, сколько мог, в качестве аргументов(dos2unix file1 file2 file3...).

Xargs будет просто одним дополнительным процессом и, следовательно, одним дополнительным штрафом за время. По возможности избегайте запуска новых процессов.

8
18.03.2021, 23:10

Теги

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