[コピー]コマンドを使用して、ディレクトリとすべてのサブディレクトリのすべての.hファイルを別のフォルダにコピーしようとします。
cp --parents -r tensorflow/lite/**/*.h libtensorflowlite-2.13.0-linux/include
上の glob は .h ファイルのみをコピーし、さらにtensorflow/lite/XXX/*.h
下 (たとえばtensorflow/lite/XXX/XXX.h
) またはtensorflow/lite/*.h
ルートディレクトリ ( ) にある .h ファイルは含みません。この問題を解決するには、cp
予想されるすべての再帰レベルに対して複数のコマンドを実行する必要があります。
cp --parents -r tensorflow/lite/*.h libtensorflowlite-2.13.0-linux/include
cp --parents -r tensorflow/lite/**/*.h libtensorflowlite-2.13.0-linux/include
cp --parents -r tensorflow/lite/**/**/*.h libtensorflowlite-2.13.0-linux/include
cp --parents -r tensorflow/lite/**/**/**/*.h libtensorflowlite-2.13.0-linux/include
私はここで明らかなものを見逃していることを知っています。 「.hで終わるすべてのサブディレクトリのすべてのファイル」を繰り返し表すglobを作成するより簡単な方法はありますか?
ベストアンサー1
**/
1992 zsh シェルのすべてのサブディレクトリレベルと一致します。
ksh93は2003年にそれを複製しましたが、以前のバージョンとの互換性のためにデフォルトで無効にし(以前**
と同じ*
)set -G
/ enabledを渡しましたset -o globstar
。bash
は2009年にこの機能を追加した最後のシェルの1つでしたが、ksh93と同じように実装されました(5.0以前は偽物でしたが)shopt -s globstar
。
だから:
cp --parents tensorflow/lite/**/*.h libtensorflowlite-2.13.0-linux/include
これはzshで動作します(またはzshとは少し異なりますが、デフォルトfish
ではある程度有効になっています)、最初に他のシェルでオプションまたは対応するオプションを有効にする必要が**
あります。globstar
set -o globstar # ksh93
set -o extended-glob # yash
set globstar # tcsh
shopt -s globstar # bash
詳細については、次を参照してください。ls *、ls**、およびls***の結果