これは簡単な質問です。現在のディレクトリから.で始まりaxis-2
、終わるすべてのファイルを.jar
ターゲットディレクトリにコピーしようとしています~/MyDirectory
。
私の最初の試みは
cp '^axis2.*jar$' ~/MyDirectory
...しかし、これを試みると、cp
「ファイルやディレクトリがありません」というエラーメッセージが表示されます。で正規表現を使用できるかどうかはわかりませんcp
。また、しばらく正規表現を使用しておらず、構文に問題がある可能性があります。
この問題を解決する方法について提案がある人はいますか?
答え1
Linux/UNIX システムでのシェルの使用法グローバルモード、正規表現ではありません。したがって、axis2
で始まり終わるファイル名を一致させるには、次のように.jar
します。
cp axis2*.jar /destination/directory
答え2
GNUfind
とGNUがcp
利用可能な場合は、次のコマンドのように正規表現を使用できます。
find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
-exec cp -t ~/MyDirectory {} +
これは、globモードまたはbash拡張globモードがユーザーの要件を満たしていない場合に便利です。
答え3
rename
私はPerlスクリプト(Robin BarkerとLarry Wallを書く)の正規表現構文が大好きです。たとえば、次のようになります。
rename "s/OldFile/NewFile/" OldFile*
OldFile.c
それぞれとOldFile.h
に名前が変更されました。NewFile.c
NewFile.h
コピーコマンドを使用して同じ結果を得たいと思います。
copy "s/OldFile/NewFile/" OldFile*
だから私はスクリプトをコピーし、renameステートメントをcopy viaに変更しましたFile::Copy
。お待ちください! Perl-regex構文を使用したコマンドのコピー:提示ワード/コピー。
答え4
というコマンドfd
(時には名前が付けられています)があります。fdfind
find
私たちはfd
次のことができます。
fd regexp ... to get files matching regexp
... -x command ... to execute `command` on the files
だから私は以下を提案します。
fd '^axis2.*jar$' -x cp -t ~/MyDirectory