GNU/Linux >> Linux の 問題 >  >> Linux

Linux の cp コマンドで正規表現をどのように使用しますか?

いいえ

cp コマンドには、その引数を正規表現として処理する機能がありません。ワイルドカードでさえ、それ(またはほとんどの実行可能ファイル)によって処理されません。むしろ、それらはシェルによって処理されます。

cp test/* test2/ 実際にはbashによって展開され、そのすべて cp その引数が cp test/file1 test/file2 test/file3 test2/ であることを実際に確認します (または test/ の実際の内容に基づいて適切なもの ).

また、あなたの表現 [^\.php] とは思えません 、あなたが望むものに一致します(.phpを含むファイルだけに一致するわけではありません ).

おそらく find を調べたいと思うでしょう。 正規表現に基づいてファイルのリストを除外するユーティリティで、 xargs を使用します 返されたファイル リストを cp に適用します。 コマンド (find にはファイルをコピーするための組み込みハンドラーがないと仮定します。私はこのツールに詳しくありません)。

試してみてください:

find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;

これは、パスに「.php」を含まないファイルを現在のディレクトリで再帰的に検索し、それらを /destination/folder/ にコピーすることを示しています。 .

要求に応じて、引数のより具体的な内訳:

  • . - 検索を開始する場所 - この場合、現在のディレクトリ
  • ! - "Not" 演算子、次のテストの結果を反転
  • -iregex - 大文字と小文字を区別しない正規表現テスト。次の引数は式です。
  • ".*\.php.*" - <Anything>.php<Anything> に一致する正規表現 - パスのどこかに「.php」が含まれるファイル。 (名前に「.php」を含むフォルダー内にあることを含め、ファイルのみを一致させるには、より複雑な式が必要になることに注意してください)
  • -exec - 上記のテストで true が返された場合にコマンドを実行します。次の引数はコマンドで、残りの引数はすべて ; までです コマンドに渡されます。 {} ファイル名を表す特別な引数です。
  • cp - find` コマンドは、一致した各パス名で実行する必要があります。
  • {} - cp に渡された、見つかったファイルへのパス コピーするファイルを知るための引数として
  • /destination/folder/ - cp に渡される引数 、 cp に伝えます ファイルのコピー先
  • \; - これは ; です -exec というターミネータ を探している。 \ でエスケープします シェルがそれを解析しようとせず、代わりにコマンドの引数としてフィードするようにします (find )

.php を持たない文字列」にマッチする正規表現を書くのはかなり難しい "なので、代わりに find と伝えます する文字列を検索する .php を含む ! で結果を反転します .


grep や xargs など、コンソールから他のいくつかのツールを使用できます。

ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder

Linux
  1. Linuxgrepコマンドの使用方法

  2. Linuxでhistoryコマンドを使用する方法

  3. Linuxでidコマンドを使用する方法

  1. 例を使用してLinuxでsuコマンドを使用する方法

  2. 例を使用してLinuxでwコマンドを使用する方法

  3. Linux で「screen」コマンドを使用する方法

  1. 例を使用してLinuxwatchコマンドを使用する方法

  2. Linuxの履歴コマンドの使用方法

  3. Linuxxargsコマンドの使用方法