Синтаксическая ошибка около неожиданного маркера' ('

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

В zsh, или в ударе ≥4 после выполнения shopt -s globstar, или в ksh после выполнения set -o globstar:

cd Test3
for x in **/*.fastq; do
  cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
done

Без ** для рекурсивного вызова в подкаталоги использовать find.

cd Test3
find . -name '*.fastq' -exec sh -c 'cat "$0" >>"/auto/dr-lc_sa1/Data/Test2/$0" && rm "$0"' {} \;

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

for x in **/*.fastq; do
  if [ -s "../Test2/$x" ]; then
    cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
  else
    mv "$x" "/auto/dr-lc_sa1/Data/Test2/$x"
  fi
done
15
24.08.2014, 17:30
2 ответа

Я никогда не пробовал использовать эти технологии RAID, но мой опыт показывает, что лучше всего работать на уровне файловой системы при попытке переноса данных из одной физической реализации RAID в другую. Что я имею в виду под этим?

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

Это определенно больше работы, и требует, чтобы у вас было достаточно жестких дисков для хранения ваших данных при их передаче, но это проверенный и верный подход, который всегда работал для многих.

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

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

-121--133968-

Если смотреть на Руководство Ekiga , это диалоговое окно выглядит так, как будто в нем можно указать, куда следует направлять вызывной сигнал на соответствующий аудиовыход.

ss#1

ПРИМЕЧАНИЕ: Эти экраны были удалены в 4,2 + Экиги. У меня есть доступ только к 4.0.1, где они все еще есть. Я на F19 и F20, которые, кажется, имеют эту более старую версию, поэтому это решение должно работать в любом из этих случаев.

Я полагаю, что вы можете выбрать «Default», а затем выбрать нужное устройство вывода из списка.

-121--146409-

Замена процесса не указана POSIX, поэтому ее поддерживают не все оболочки POSIX, только некоторые оболочки, такие как bash , zsh , ksh88 , ksh93 .

В системе Centos /bin/sh используется символьная связь с /bin/bash . При вызове bash с именем sh , bash переходит в режим posix ( Bash Startup Files - вызывается с именем sh ). В режиме posix подстановка процесса не поддерживается, что приводит к синтаксической ошибке.

Сценарий должен работать, если вызывается bash непосредственно bash test.sh . Если нет, может быть, bash перешел в режим posix. Это может произойти при запуске bash с помощью аргумента -posix или переменной POSIXLY _ CORRECT , если параметр bash start:

$ bash --posix test.sh 
test.sh: line 54: syntax error near unexpected token `('
test.sh: line 54: `paste <(printf "%s\n" "TOP")'

$ POSIXLY_CORRECT=1 bash test.sh 
test.sh: line 54: syntax error near unexpected token `('
test.sh: line 54: `paste <(printf "%s\n" "TOP")

или bash построен с помощью опции -enable-strict-posix-default .

Здесь не требуется подстановка процесса, можно использовать стандартные оболочечные трубы:

printf "%s\n" "TOP" | paste -

- является стандартным способом указать вставить для считывания данных из stdin. В некоторых реализациях paste ее можно опустить, хотя она не является стандартной.

Где это было бы полезно при вставке выходных данных нескольких команд, как в:

paste <(cmd1) <(cmd2)

В системах, поддерживающих /dev/fd/n , что можно сделать в sh с помощью:

{ cmd1 4<&- | { cmd2 3<&- | paste /dev/fd/3 -; } 3<&0 <&4 4<&-; } 4<&0

(это то, что < (...) делает внутри системы).

23
27.01.2020, 19:49

Вот еще одно обходное решение. Вместо выполнения команды запустите bash и передайте команду в bash, используя -c:

bash -c 'paste <(printf "%s\n" "TOP")'
2
27.01.2020, 19:49

Теги

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