2016-04-23 6 views
1

、多くのサブディレクトリとディレクトリaaaがあるとしbbbccc ...一 これらのディレクトリのと呼ばれるファイルでありますx.txt(ただし、私はどのディレクトリにいるのかわかりません)。しかし、これは動作しませんはbash:(!一つだけ)の未知のサブディレクトリ(?ワイルドカード)からファイルを移動

mv */x.txt {target_dir} 

を:私はすべてのサブディレクトリを超えるループしてかどうかをチェックすることになったソリューションとしてNo such file or directory

は、私が使用する代替ディレクトリにそのファイルを移動したいですファイルには [ -f ]があり、見つかったファイルは一度移動します。

しかし、もっと簡単なソリューションがあるのだろうかと思っていましたか?あなたはエコーがファイルを見つけ、そうする場合は 'globstar' オプションを有効にすると、

shopt -s globstar 
echo **/x.txt 

を使用して試みることができる

globstar 
     If set, the pattern ** used in a pathname expansion context will match 
     all files and zero or more directories and subdirectories. If the 
     pattern is followed by a /, only directories and subdirectories match. 

bashの manページから

答えて

3
find . -type f -name x.txt -exec mv {} target_dir \; 
+0

ありがとう、私は何千ものディレクトリと数千のファイルがあるはずです。私はファイル 'x.txt'の名前を知っています(それは一意な名前なので、そのようなファイルは一つのディレクトリにしかありません)。あなたのソリューションがより速いかどうかを確認するためにこれを試してみます。 – econ

+0

@econ: '.'をベースディレクトリに置き換えることができます。 – sjsam

+1

私はそれを見て良いです[ここ](http://superuser.com/questions/341232/faster-alternatives-to-find-and-locate) – sjsam

1

等価物

mv **/x.txt {target_dir} 

注:globstarはbash専用オプションです(bash 4.0で追加されました)古いリリース(MAC上で標準的なbash 3など)を使用している場合、これは機能しません。

+0

ありがとう、そうです、私は使用していますOSX(3.2)のデフォルトのbashですが、これは4.0にアップグレードする余分な理由の1つです。だから、私は夏の間、バッシュ4に移動すると思う。 – econ

関連する問題