すべてのファイルをコピーしたい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_z
glob演算子を持つ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/
0
sの後に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に伝えます。