Результат cp -rf source dest
отличается, если dest
уже существует.
dest
не существует, будет создана копия source
с именем dest
. Предполагая, что source
содержит файл f1
, он создаст dest/f1
.dest
существует как каталог и если dest
не содержит файла с именем source
, он скопирует source
со всем содержимым вdest
. В приведенном выше примере вы получите dest/source/f1
. dest
существует в виде файла и если source
является каталогом, копирование завершится ошибкой. dest
существует как каталог и если dest
содержит файл с именем source
, копирование завершится ошибкой. dest
существует в виде файла и если source
является файлом, он перезапишет dest
содержимым source
. Если вы хотите удалить любой существующий каталог назначения, вы можете изменить (cp -rf $cmdline $cmdline$i; ) &
на (rm -rf $cmdline$i && cp -rf $cmdline $cmdline$i; ) &
.
Да, вы можете выполнять любые операции с полями. Например:
$ cat file | awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1)" "a[n]}'
file_name_delimited_by_underscore_123 123
another_example_456 456
Здесь, конечно, не нужно cat
; вы могли бы awk
прочитать файл напрямую -, а поскольку разделителем полей вывода по умолчанию OFS
является пробел, было бы более идиоматично записывать результаты в виде отдельных полей вывода вместо объединения строк:
awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1), a[n]}' file
Вы можете использоватьsed
:
$ sed -e 's;^.*/\(.*_\)\([0-9]*\)\.[^\.]*$;\1_\2 \2;' file
file_name_delimited_by_underscore_123 123
another_example_456 456
^.*/
удаляет путь.
\(.*_\)
фиксирует имя до последнего символа подчеркивания.
\.[^\.]*
удаляет расширение.
\1\2 \2
заменить захваченными группами.
С любым sed:
$ sed 's:.*/\(.*_\(.*\)\)\..*:\1 \2:' file
file_name_delimited_by_underscore_123 123
another_example_456 456