이름이 하위 문자열로 시작하는 파일을 복사하는 방법은 무엇입니까?

이름이 하위 문자열로 시작하는 파일을 복사하는 방법은 무엇입니까?

모든 파일을 복사하고 싶어요두 자리 숫자로 시작하고 뒤에 밑줄이 옵니다.. 아래 코드는 파일을 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앞에 숫자가 하나뿐이므로 패턴과 일치하지 않습니다 _. 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에 알려줍니다.

관련 정보