Перемещение всех файлов из каталогов на один шаг вверх
Вопрос
У меня есть каталоги, которые выглядят так
fool@brat:/mydir/ucsc_mm8> tar -xvf *.tar
1/chr1.fa.masked
1/chr1_random.fa.masked
2/chr2.fa.masked
3/chr3.fa.masked
4/chr4.fa.masked
5/chr5.fa.masked
5/chr5_random.fa.masked
19/chr19.fa.masked
Un/chrUn_random.fa.masked
Что я хочу сделать, так это убрать все символы "*. masked" файлы в подкаталогах / 1
до / Un
.
Есть ли компактный способ сделать это в Linux / Unix?
Решение
Типичным способом перемещения файлов всех файлов, соответствующих определенному выражению, является
mv 1/*.masked targetDir
где targetDir может быть ..
Если вы хотите переместить его из каталогов 1,2,3, вы можете сделать что-то вроде
mv */*.masked targetDir
Или, если вы хотите специально переместить его из пронумерованных каталогов, вы можете просто запустить что-то вроде
mv [0-9][0-9]/*.masked targetDir
Другие советы
Многие оболочки Unix также поддерживают оператор * в директории части пути. Следующее работает как минимум в bash и zsh:
ls */*.masked
Это вернет все файлы, которые заканчиваются на .masked на один каталог глубже.
Итак, чтобы переместить их:
mv */*.masked destination
mv */*.masked .