Нет никакого встроенного способа связать файл и удалить его, необходимо будет повредить его в два шага.
В 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
Я никогда не пробовал использовать эти технологии RAID, но мой опыт показывает, что лучше всего работать на уровне файловой системы при попытке переноса данных из одной физической реализации RAID в другую. Что я имею в виду под этим?
Я имею в виду, что я получу еще один набор дисков и перенесу свое содержимое с первого RAID в промежуточное расположение (для его хранения требуется несколько жестких дисков), а затем перенастроу жесткие диски RAID в новых технологиях RAID.
Это определенно больше работы, и требует, чтобы у вас было достаточно жестких дисков для хранения ваших данных при их передаче, но это проверенный и верный подход, который всегда работал для многих.
Использование определенного пути миграции, несомненно, является менее распространенным подходом, и вы рискуете потерять свои данные в процессе. Если преобразование не удастся путь вы вернетесь к подходу, который я предлагаю в любом случае.
Поэтому я бы укусил пулю и пошел с таким подходом с самого начала, это просто сработает, и вы будете тратить гораздо меньше своего ценного времени в процессе.
-121--133968-Если смотреть на Руководство Ekiga , это диалоговое окно выглядит так, как будто в нем можно указать, куда следует направлять вызывной сигнал на соответствующий аудиовыход.
ПРИМЕЧАНИЕ: Эти экраны были удалены в 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
(это то, что < (...)
делает внутри системы).
Вот еще одно обходное решение. Вместо выполнения команды запустите bash и передайте команду в bash, используя -c:
bash -c 'paste <(printf "%s\n" "TOP")'