Извлечь файлы с определенным расширением и сохранить структуру каталогов?

Если под «не на 100% успешно» вы имеете в виду, что вам нужны только значения полей без имен полей, тогда вам нужно использовать awk , а не grep.

например.

awk -F: '$1 ~ /^(Name|Email)$/ {print $2}' filename

Или, если вы все еще хотите, чтобы каждая запись была разделена пустой строкой:

awk -F: '$1 ~ /^(Name|Email)$/ {print $2}; /^[[:space:]]*$/ {print "\n"}' filename
4
25.07.2016, 22:05
3 ответа

Эти 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

Я использовал этот пост для источника информации.

3
27.01.2020, 20:52

А как насчет 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
0
27.01.2020, 20:52

Я предложу альтернативу, используя 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

3
27.01.2020, 20:52

Теги

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