1. ホーム
  2. bash

[解決済み] すべてのサブディレクトリから特定の拡張子を持つすべてのファイルをコピーする

2022-04-24 11:03:57

質問

unixで、ある拡張子を持つすべてのファイル(すべてのエクセルファイル)をすべてのサブディレクトリから別のディレクトリにコピーしたい。私は次のコマンドを持っています。

cp --parents `find -name \*.xls*` /target_directory/

このコマンドの問題点は

  • ディレクトリ構造もコピーしてしまうので、ファイルだけが欲しい(だから、すべてのファイルは/target_directory/に終わるはず)。

  • ファイル名にスペースが含まれるファイルはコピーされません(かなりあります)。

これらの問題に対する解決策があれば教えてください。

解決方法は?

--parents は、ディレクトリ構造をコピーしているので、それを取り除く必要があります。

この書き方だと find が実行され、その出力がコマンドラインに置かれ、次のようになります。 cp はファイル名を区切るスペースと 内の を指定します。のようにするのがよいでしょう。

$ find . -name \*.xls -exec cp {} newDir \;

その中で cp が実行される各ファイル名に対して find を見つけ、そのファイル名を正しく渡します。 詳細はこちら を使用することができます。

上記すべての代わりに zsh と入力するだけです。

$ cp **/*.xls target_directory

zsh は、サブディレクトリを含むワイルドカードを展開することができ、この種のことを非常に簡単に行うことができます。