Shell, копировать файлы с похожими именами - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы скопировать серию похожих файлов из текущего каталога в целевой каталог, файлы в текущем каталоге:

prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0001_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0001_uz.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0002_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0002_uz.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0003_ux.hst
prod07_sim0500-W31-0.2_velocity-models-2D_t80_f0003_uz.hst

Где sim от sim0001 до sim0500 и f от f0001 до f0009.Мне нужны только f0002, f0005 и f0008.Я пишу следующий код:

target_dir="projects/data"

for i in {0001..0500}; do
    for s in f000{2,5,8}; do
        files="[*]$i[*]$s[*]"
        cp $files target_dir
    done
done

Я очень новичок в Shell, и мне интересно, как написать $files="[*]$i[*]$s[*]"$, чтобы он мог соответствовать только f0002, f0005 и f0008,Причина, по которой я также использую for i in {0001..0500}; do, заключается в том, что файлы слишком велики, и я хотел бы убедиться, что вначале я мог получить доступ к некоторым завершенным (например, включая все sim0001).

Редактировать: измененоfor s in f0002 f0005 f0008; do до f000{2,5,8}.

1 Ответ

0 голосов
/ 21 ноября 2018

Что вам нужно, это globbing и немного другое цитирование :

cp *"$i"*"$s"* "$target_dir"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...