перемещать файлы, соответствующие определенному шаблону

Как перенести файлы в папку с определенным шаблоном в папку назначения?

Я хочу переместить файлы с именами в диапазоне [00-09] в 4-ом столбце, если они разделены разделителем "-".

ls | cut -d "-" -f 4 | grep ^[00-09]

Показывает эти файлы:

UNCID_376947.TCGA-DD-A118-01A-11R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.7.trimmed.txt
UNCID_377115.TCGA-CC-5263-01A-01R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.5.trimmed.txt
UNCID_377252.TCGA-DD-A114-11A-12R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.6.trimmed.txt
1
задан 20 October 2015 в 13:22

1 ответ

Вы можете использовать «цикл цикла»:

for FILE in 'file-list'
do
  echo "$FILE"
  mv "$FILE" /your/destination/
done

Объяснение:

'file-list' следует заменить на метод, чтобы получить список файлов, которые вы хотите использовать. Например, $(cat files.txt), если у вас уже есть список в файле, pattern*, если файлы в вашем каталоге начинаются с того же шаблона или $(find -iname "*pattern*"), если вы хотите использовать find для получения списка. Выход будет сохранен в переменной FILE один элемент за другим. Команды между do и done выполняются для каждого элемента. Вы можете использовать echo "$FILE", чтобы проверить, соответствует ли ваша команда правильным файлам перед добавлением команды mv в цикл.

2
ответ дан 23 May 2018 в 16:32
  • 1
    Мне нравится идея использовать цикл for, чтобы вы могли больше контролировать то, что делаете. Однако for FILE in $(expression) может быть немного избыточным: во-первых, поскольку разбор ls не рекомендуется; во-вторых, потому что вы можете прямо сказать for file in expression* вместо того, чтобы расширять результат. То есть, лучше сказать for file in *, чем for file in $(ls). – fedorqui 20 October 2015 в 13:14
  • 2
    Да ты прав. Я попытался сохранить его немного более общим, потому что ваш ответ уже дает хорошее конкретное решение для искателя. Возможно, команда find также будет хорошей идеей в случае с OPs, чтобы получить список файлов – Wayne_Yux 20 October 2015 в 13:18
  • 3
    О вашем обновлении: вместо for name in $(cat file) предпочтительнее сказать while read -r name; do ... done < file. Или, если вы хотите подать результат find, while read -r name; do ... done < <(find ...). – fedorqui 20 October 2015 в 13:32

Другие вопросы по тегам:

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