2016-09-18 8 views
-1

私は基本的にこのシェルスクリプトを使って何をしようとしているのですか?ユーザがコンソールからディレクトリを入力し、そのディレクトリ内のすべての.cファイルとその中のサブディレクトリです。スクリプトの現在の場所にコピーされます)。その中の何も(いなくても.cファイル)とディレクトリの入力に応じて特定のファイル拡張子をコピーするにはどうすればよいですか?

しかし
rsync -va --include "*/" --include '*.c' --exclude '*' "$1/" . 

私は、スクリプト(のsh test.sh DIRA)を実行して$ 77ディレクトリ内にコピーサブディレクトリのすべてを、。私は出力をディレクトリではなく、.cファイルだけにしたい。

もし私が現在のディレクトリでlsになっていたら、file.c file1.c file2.c NOT dir1 dir2 dir3のようなたくさんのファイルが出てきます。

+1

は、Unixの技術サポートではなく、プログラミングの質問です。 – Barmar

答えて

0

--exclude '*'を省略してください。後でコマンドラインで発生するため、候補ファイルがテストに成功した後に適用され、ファイルが拒否されます。

ので、単純に現在のディレクトリでの階層に与えられたサブツリー内の任意の.cファイルをコピーするために、プレーンを使用します。

rsync -va --include '*.c' "$1" . 

はEDIT:

rsyncとして、すべてのコピーについてですと階層を同期すると、階層を単一のディレクトリにまとめるのは間違ったツールです。このような操作を行うには、ターゲット側のソースパスを明示的に無視するコマンドが必要です(平文cpなど)。

など。あなたのケースでは、使用することができます:

find "$1" -name '*.c' -print0 | xargs -0 -I'{}' cp {} . 
+0

データが送信され、取得されましたが、.cファイルはどこにも移動されませんでした。私はおそらく間違ってrsyncを使用していますか? -vaの代わりに-cpを使用する必要がありますか? – Orcka

関連する問題