모든 파일을 복사하고 싶어요두 자리 숫자로 시작하고 뒤에 밑줄이 옵니다.. 아래 코드는 파일을 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_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에 알려줍니다.