Запись и поток вывода и поток сообщений об ошибках в тот же файл

В zsh или ударе ≥4:

for x in **/*.nef; do
  x=${x%.nef}
  if [ -e "$x.xmp" ]; then
    tar -czf "$x.tgz" -- "$x.nef" "$x.xmp" && rm -- "$x.nef" "$x.xmp"
  fi
done

Удалите && rm … часть, если Вы не хотите удалять заархивированные файлы.

Удалите **/ часть на первой строке, которая только будет действовать в текущем каталоге а не в его подкаталогах также (и затем отрывок будет работать в любой оболочке).

Некоторые старые tar реализации не могут поддерживать -z создать архив gzip; затем можно использовать tar -cf "$x.tar" -- "$x.nef" "$x.xmp" && gzip -o "$x.tgz" -- "$x.tar" && rm …. Если Вы не хотите удалять файлы, другая возможность tar -cf - -- "$x.nef" "$x.xmp" | gzip >"$x.tgz" (эта форма не может быть объединена с && rm потому что это удалило бы исходные файлы даже если tar отказавшая команда).

2
06.06.2012, 01:19
2 ответа

Для удара,

swipl -s jobshop.chr < CHRInput &> output

3
27.01.2020, 22:01
swipl -s jobshop.chr < CHRInput > output 2>&1

2>&1 означает, что “дескриптор файла перенаправления 2 (стандартная погрешность) к любому дескриптору файла 1 (стандартный вывод) подключен с”. Отметьте это 2>&1 должен прибыть после перенаправления стандарта ouptput: 2>&1 >output сначала отправил бы fd 2 к любому fd 1 подключен с тем, в то время, когда (т.е. терминал) затем перенаправляют fd 1 к терминалу.

Обратите внимание, что в зависимости от того, как программа записана, это не могло бы чередовать вывод в том же порядке, как будто это работало на терминале. Поэтому много программ буферизуют вывод на stdout, т.е. они только на самом деле выписывают данные, когда буфер полон. Но когда стандартный вывод подключен к терминалу, это с буфером строки, т.е. каждая строка выписана, даже если буфер не полон. (Stderr, с другой стороны, не буферизуется по умолчанию.) Поэтому, если программа пишет сплошные линии без заботы о сбрасывании буферов или changning настройки по умолчанию и Вы ожидают, что они существуют порядка, были ли они записаны в стандартную погрешность, или стандартный вывод, перенаправляя в файл не мог бы работать.

В довольно недавних системах Linux, если перенаправленный вывод имеет строки не в порядке, попытку

stdbuf -oL -oL swipl -s jobshop.chr <CHRInput >output 2>&1
1
27.01.2020, 22:01

Теги

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