Если под «не на 100% успешно» вы имеете в виду, что вам нужны только значения полей без имен полей, тогда вам нужно использовать awk
, а не grep.
например.
awk -F: '$1 ~ /^(Name|Email)$/ {print $2}' filename
Или, если вы все еще хотите, чтобы каждая запись была разделена пустой строкой:
awk -F: '$1 ~ /^(Name|Email)$/ {print $2}; /^[[:space:]]*$/ {print "\n"}' filename
Эти rsync-команды должны делать то, что вы ищете
Это будет делать ARW
rsync -arvz --progress --include='*.ARW' --include="*/" --exclude="*" ./source-dir-2016 ./target-ARW-2016
И это будет делать CR2
rsync -arvz --progress --include='*.CR2' --include="*/" --exclude="*" ./source-dir-2016 ./target-CR2-2016
Я использовал этот пост для источника информации.
А как насчет cp
рекурсивно 2016
dir в 2016_ARW
и rm * .CR2
из этого, то rm * .ARW
из основного.
например.
user:~$ ls 2016/06/03/
file_one.ARW file_two.CR2 file_three.CR2 file_four.ARW file_five.ARW
user:~$ cp -R 2016 2016_ARW
user:~$ rm 2016_ARW/06/03/*.CR2
user:~$ rm 2016/06/03/*.ARW
user:~$ ls 2016/06/03/
file_two.CR2 file_three.CR2
user:~$ ls 2016_ARW/06/03/
file_one.ARW file_four.ARW file_five.ARW
Я предложу альтернативу, используя find
exec
и cp --parents
find ./ -name *.ARW -exec cp --parents {} /home/user/target-ARW-dir/ \;
find ./ -name *.CR2 -exec cp --parents {} /home/user/target-CR2-dir/ \;
Ограничение Дело в том, что ваш рабочий каталог должен располагаться чуть выше файловой структуры, которую вы хотите скопировать.
Описание того, что он делает:
находит
находит файлы
./
каталог, в котором он будет искать
-имя * .ARW
перечисляет только файлы, заканчивающиеся на .ARW
-exec
выполнять команды для списка возвращенных файлов
cp --parents
копировать и поддерживать структуру каталогов
{}
расширяется до каждого из файлов find
, представьте его как x
в для x в $ files
/ home / user / target-ARW-dir /
просто пример каталога, вы должны изменить это на то, что вы действительно хотите
\;
, правильный способ завершить find -exec
, чтобы он действовал как цикл for