Безопасно ли «find/var/log -type f -delete» на Debian 9?

Эта команда использует только функции POSIX find и ls :

find . -type f -mtime +10 -exec ls -lS {} +

Однако это может вызывать ls более одного раза, если в текущем каталоге (или рекурсивно подкаталогах) имеется очень большое количество файлов, соответствующих -mtime +10 первичный.

Если он вызывает ls более одного раза, конечно, сортировка будет выполняться только в каждом выполнении ls , а не в нескольких выполнениях.

Тем не менее, для разумного количества файлов это, вероятно, ваш лучший выбор.

1
20.09.2018, 18:12
2 ответа

В bash для форматирования вывода можно использовать printf.

for i in {0..255} ; do
    printf "#define  ICFG%-3d     0x2%03X\n" $i $((i*4))
done > insert.txt

%dозначает десятичное целое число, 3— размер, минус означает выравнивание по левому краю. Xозначает шестнадцатеричный регистр, 3— длину, 0означает 0 -с дополнением. $((... ))вводит арифметическое расширение.

Затем просто используйте sed, чтобы вставить его в свой файл

sed -i~ 500rinsert.txt input.txt

Или вы можете использовать Perl:

perl -i~ -pe 'if ($. == 500) {
    printf "#define  ICFG%-3d     0x2%03X\n", $_, $_ * 4 for 0.. 255 }
' -- input.txt
  • $.— номер строки ввода
  • printf ведет себя так же, как в bash (, по крайней мере, для %-3dи%03X)
1
27.01.2020, 23:31
awk '{print}; FNR == 500 {for (i  = 0; i < 256; i++)
  printf "#define ICFG%d\t%#x\n", i, 0x2000 + i*4}' < file.h

Чтобы отредактировать файл на месте -, замените awkна gawkи добавьте параметр -i inplace(и передайте путь к файлу в качестве аргумента вместо подачи его содержимого на стандартный ввод awk.):

gawk -i inplace '{print}; FNR == 500 {for (i  = 0; i < 256; i++)
  printf "#define ICFG%d\t%#x\n", i, 0x2000 + i*4}' file.h

С помощью zshили ksh93вместо bashвы также можете создать этот текст с помощью:

printf '#define ICFG%d %#x\n' {0..255}{,"*4+0x2000"}

bashкак и ksh93скопировал {0..255}из zsh, но не принимает произвольные арифметические выражения в аргументах для printf, поэтому вам нужно будет использовать там цикл.

1
27.01.2020, 23:31

Теги

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