У меня есть 220 каталогов, каждый с 2 файлами внутри. все файлы имеют то же завершение (*.fq.gz). Я хочу переместить все эти файлы в один уникальный каталог.
Я думаю, что мог сделать tha с циклом оболочки, но у меня нет идеи, как сделать это...
Вы правы. Можно сделать эту задачу с два для циклов. Одна внутренняя часть другой. Мы создадим сценарий удара, чтобы сделать просто это. Давайте посмотрим, как это было бы похоже:
#!/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 {} \;
.
Это - что-то, что я использую, когда я не должен быть дополнителен осторожный
mkdir unique_dir && mv */*.fq.gz unique_dir/
, Если я не пропустил что-то.
Когда контакт со многими файлами или файлами с забавными именами, 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
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 другую панель, являющуюся другой вкладкой, которая является исходной целью