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

У меня есть 220 каталогов, каждый с 2 файлами внутри. все файлы имеют то же завершение (*.fq.gz). Я хочу переместить все эти файлы в один уникальный каталог.

Я думаю, что мог сделать tha с циклом оболочки, но у меня нет идеи, как сделать это...

2
задан 20 November 2019 в 00:49

4 ответа

Вы правы. Можно сделать эту задачу с два для циклов. Одна внутренняя часть другой. Мы создадим сценарий удара, чтобы сделать просто это. Давайте посмотрим, как это было бы похоже:

#!/bin/bash

for dir in */; do
  echo "$dir"
  cd "$dir"
  for file in *; do
    echo "moving $file" 
    mv $file ~/targetdir    
  done
  cd ..
done

, Если Вы хотите иметь более быстрый сценарий просто, удаляют повторение из сценария. Я сделал это для упрощения отслеживанию его прогресса.

Просто создают файл и копируют эти команды в него. После этого дайте ему разрешение выполнения с chmod +x scriptfile и выполните его с ./scriptfile в основном каталоге, где другие каталоги расположены. Не забывайте заменять targetdir и scriptfile с Вашим целевым именем файла каталога и сценария.

, Если у Вас есть больше файлов в Ваших каталогах, просто замените * *.fq.gz в for file цикл, и он выполнит итерации только через Ваши 2 файла.

Предупреждение!!! Не создавайте свой целевой каталог в основном каталоге, потому что он выполнит итерации в нем также.

<час>

Редактирование: как @steeldriver предложенный, Вы могли удалить for dir команды и просто использовать for file команды с */*.fq.gz, чтобы иметь более быстрый цикл. Я решил поддержать их для лучшего отслеживания того, что идет на внутренние каталоги.

Редактирование: При проведении некоторого исследования на страницах справочника и веб-страницах находки и команд xarg, которым отвечает @waltinator, я нашел это более удобным, быстрее и безопасным. Я даже нашел альтернативу xarg при помощи - исполнительная опция команды находки такой как find . -type f -name '*.fq.gz' -exec mv --backup=numbered --target-directory=$dest {} \;.

1
ответ дан 2 December 2019 в 03:26

Это - что-то, что я использую, когда я не должен быть дополнителен осторожный

mkdir unique_dir && mv */*.fq.gz unique_dir/

, Если я не пропустил что-то.

2
ответ дан 2 December 2019 в 03:26

Когда контакт со многими файлами или файлами с забавными именами, find и xargs является инструментами для использования. Считайте man find;man xargs и сделайте что-то как:

dest=../destination # must be outside this directory tree
mkdir $dest

find . -type f -name '*.fq.gz' -print0 |\
   xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest

После того, как Вы будете довольны результатами, замените" echo mv" просто" mv".

Для исключения эти $dest находится в трудности с текущим каталогом, используйте --prune:

find . -type d -name "$dest" -prune -o -type f -name '*.fq.gz' -print0 |\
   xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest
0
ответ дан 2 December 2019 в 03:26
krusader can search files and save to a custom tab then you can select all of those (or filter the list) and move them to the destination

sudo apt install krusader

Вы могли бы также добавить

sudo apt install krename

, переходят к самым верхним исходным инструментам каталога, поиск или канал щелчка crtl+s к редактированию поля списка выбирают весь файл, копируют в другую панель или f5 другую панель, являющуюся другой вкладкой, которая является исходной целью

-1
ответ дан 2 December 2019 в 03:26

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

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