从目录移动所有文件一步到位

nev*_*int 10 unix linux bash shell mv

我有一个看起来像这样的目录

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
Run Code Online (Sandbox Code Playgroud)

我想要做的是在子目录搬出所有的"*.masked"文件/1高达/Un.在Linux/Unix中有一种简洁的方法吗?

bsd*_*ish 16

移动文件的典型方法是匹配特定表达式的所有文件

mv 1/*.masked targetDir
Run Code Online (Sandbox Code Playgroud)

targetDir可能在哪里..

如果你想从目录1,2,3移动它,你可以做类似的事情

mv */*.masked targetDir
Run Code Online (Sandbox Code Playgroud)

或者,如果你想从编号目录中专门移动它,你可以运行类似的东西

mv [0-9][0-9]/*.masked targetDir
Run Code Online (Sandbox Code Playgroud)


Bri*_*lin 5

许多unix shell也支持路径的目录部分中的*运算符.以下至少在bash和zsh中起作用:

ls */*.masked
Run Code Online (Sandbox Code Playgroud)

这将返回以.mask一个目录更深的所有文件.

所以移动他们:

mv */*.masked destination
Run Code Online (Sandbox Code Playgroud)