copyDestからPastDestに20から32までの数字を含むファイルをコピーしたいです。私は何が間違っていましたか?
cp -r ~/copyDest/*2[0-9]|3[0-2]* ~/pasteDest
ありがとうございます。
ベストアンサー1
|
パイプライン演算子です。
cp -r ~/copyDest/*2[0-9]|3[0-2]* ~/pasteDest
globで拡張された最初のファイルと呼ばれるコマンドcp
にパイプされたコマンド。グローバル代替演算子3[0-2]*
になるには、in(ただし、数値範囲一致のための専用演算子を含む)とin(またはwith on)が|
必要です。(...)
zsh
zsh
@(...)
ksh
bash
extglob
したがってzsh
:
cp -r ~/copyDest/(*[^0-9]|)<20-32>(|[^0-9]*) ~/pasteDest
それ以外の場合は(*[^0-9]|)
foo120とも一致します。
ksh
or(またはinside)または(within)を使用すると、そのbash -O extglob
項目(ファイルがコピーされる順序を除く)は次のようになります。shopt -s extglob
bash
zsh -o kshglob
set -o kshglob
zsh
(
LC_ALL=C
cp -r ~/copyDest/?(*[^0-9])*(0)@(2[0-9]|3[0-2])?([^0-9]*) ~/pasteDest
)
kshまたはbashの場合、ほとんどのシステムとCを除くほとんどのロケールでは、[0-9]
0123456789よりも多くの文字が一致するためLC_ALL=C
(これはglob拡張ソート順序にも影響します)、ファイル名にASCII文字のみが含まれている場合は省略できます。一般システムのロケールには、0123456789以外のASCII文字が含まれるとは思わないからです[0-9]
。他の選択肢[0-9]
はで置き換えることです[0123456789]
。
またzsh -o kshglob
、パターンがin以外のファイルと一致しない場合は、cp
リテラル引数(有効だがある可能性がないファイル名)を使用して呼び出され.../?(*[^0-9])*(0)@(2[0-9]|3[0-2])?([^0-9]*)
、存在する場合はコピーされます(cp
そうでなければ誤って返されます)。bash
このオプションを使用するとfailglob
、より正常な動作に近づくことができますzsh
(パターンが一致しない場合はコマンドをキャンセル)。
foo20.txt
上記では、名前の付いたファイルのコピーに特別な注意を払いました。foo00020.txt
ただし、名前foo120.txt
またはファイルはコピーされませんでしたfoo200.txt
(名前に20が含まれていても)。それでもfoo32.12.txt
またはfoo-1E-20.txt
ファイルをコピーしますfoo0x20.txt
。
foo120
それでもコピーしたりファイルに保存したりすると、はるかにfoo200
簡単になります。
zsh
:cp -r ~/copyDest/*<20-32>* ~/pasteDest
bash -O extglob
協力:cp -r ~/copyDest/*@(2[0123456789]|3[012])* ~/pasteDest