名前が部分文字列で始まるファイルをコピーする方法は?

名前が部分文字列で始まるファイルをコピーする方法は?

すべてのファイルをコピーしたい2桁の数字で始まり、後ろに下線が続きます。。以下のコードはファイルをKIRCフォルダにコピーしません。

cp -R  ~/KIRP/[0-9][0-9]_* ~/KIRC/

フォルダの内容の例KIRP:

11_abc.py
9_efg.R
hij_12.csv

期待される出力: 11_abc.py 9_efg.R

答え1

9_efg.R前に数字が1つだけなので、パターンと一致しません_11_abc.pyしかし、それは。おそらくglob演算子をfishサポートしていない[...]シェルで試してみました。

_名前が0から99の間の数字で始まり、数字を表すために使用される数字(000_x、、1_yを含む)が続くファイルをコピーするには、11_zglob演算子を持つzshシェルを使用できます。

cp -R  ~/KIRP/<0-99>_* ~/KIRC/

または

zsh -c 'cp -R  ~/KIRP/<0-99>_* ~/KIRC/'

他の殻から。

bashシェルを使用すると、次のことができます。

shopt -s extglob failglob
cp -R ~/KIRP/*(0)[123456789]?([0123456789])_* ~/KIRC/

0sの後に1から9までの数字([1-9]bashとは異なり、zshは通常数百の異なる文字と一致します)と0から9の間のオプションの数字が続く任意の数字と一致します。一致するものがない場合は、文字通り名前付きfailglobファイルをコピーしないでください。*(0)[123456789]?([0123456789])_*

次の種類のファイルの場合目次、ディレクトリとその内容の両方を再帰的にコピーしますR。ファイル形式の除外目次、そしてzsh

cp ~/KIRP/<0-99>_*(^/) ~/KIRC/

(Bashにはそれに対応するものはありません)。

または、すべてのレベルのサブディレクトリにあるファイルをコピーしてください。~/KIRP

cp ~/KIRP/**/<0-99>_*(D^/) ~/KIRC/

D隠しディレクトリのコンテンツを除外するには削除してください)。

答え2

を使ってbashを入力できますcp -R ~/KIRP/[0-9]?([0-9])_* ~/KIRC/。 extblobオプションを設定する必要があります(参考資料を参照echo $BASHOPTS)。しかし、これはファイルとディレクトリをコピーします。

答え3

私が正しく理解したら、ディレクトリとそのサブディレクトリの「ファイルのみ」を「フラット」ディレクトリにコピーしたいと思います。

これは仕事ですfind

marco@minestrone ~/temp [0]
$ ls -lhvF KIRP
insgesamt 0
-rw-r----- 1 marco marco 0 Feb 26 18:54 9_efg.R
-rw-r----- 1 marco marco 0 Feb 26 18:54 11_abc.py
-rw-r----- 1 marco marco 0 Feb 26 19:00 23_fdsjal.txt
-rw-r----- 1 marco marco 0 Feb 26 19:00 55_adwf.md
-rw-r----- 1 marco marco 0 Feb 26 18:54 hij_12.csv
marco@minestrone ~/temp [0]
$ ls -lhvF KIRC
insgesamt 0
marco@minestrone ~/temp [0]
$ find ~/temp/KIRP -type f -name "[0-9][0-9]_*" -exec cp {} ~/temp/KIRC \;
marco@minestrone ~/temp [0]
$ ls -lhvF KIRC
insgesamt 0
-rw-r----- 1 marco marco 0 Feb 26 19:01 11_abc.py
-rw-r----- 1 marco marco 0 Feb 26 19:01 23_fdsjal.txt
-rw-r----- 1 marco marco 0 Feb 26 19:01 55_adwf.md

whereは-type f 検索をファイルに制限し、-nameファイル名の正規表現を保存し、-exec結果として何をするかをfindに伝えます。

関連情報