고유한 이름을 가진 파일이 있다고 가정해 보겠습니다(예:스크린샷 20180509143013.png)/media/SD256에 복사하고 싶습니다.
문서/미디어/드라이브1/사용자/이름/사진/스크린샷/Screenshot20180509143013.png탐색하고 싶지 않은 특정 하위 디렉터리 수준에서 멈췄습니다./미디어/드라이브1/사용자/이름/이미지/스크린샷/고유한 이름을 가진 파일을 찾습니다.
대신 작업 디렉터리가 /media/drive1/일 때 다음과 같은 명령을 실행하고 싶습니다.
copy --find-filename-then-copy Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder
먼저 파일을 찾아 복사하는 명령이 있나요?
답변1
사용 find
:
find . -type f -name Screenshot20180509143013.png -exec cp {} /dev/media/SD256/DestinationFolder ';'
이것은 정확히 해당 이름을 가진 현재 디렉토리 안이나 아래에 있는 모든 일반 파일을 찾습니다 Screenshot20180509143013.png
. 발견된 파일은 에 복사됩니다 /dev/media/SD256/DestinationFolder
. 동일한 이름을 가진 파일이 여러 개 있는 경우(없다고 가정하면) 파일은 서로 덮어쓰게 됩니다. 대상 디렉토리.
답변2
또는 zsh
또는 fish
또는 ksh -o globstar
( bash -O globstar
또는 shopt -s globstar
이후 bash
) 또는 이후 또는 tcsh
:set globstar
yash -o extended-glob
cp -- **/Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder
globstar는 **
구문을 사용하여 재귀 검색을 수행합니다. glob의 나머지 부분(파일 이름 패턴)이 고유하면 원하는 결과를 얻을 수 있습니다. 예를 들어 ...3*3
질문 앞부분의 파일 이름 대신 귀하의 예에서 복사했습니다 .Screenshot20180509143013.png
알아채다:
fish
4.3 이전 버전의 bash는 반복할 때 심볼릭 링크를 따릅니다.zsh
,tcsh
또는 를 사용하면 이 동작을 대신yash
사용할 수 있습니다 .***
**
fish
파일이 현재 디렉터리에 있으면 파일을 찾을 수 없습니다.- 숨겨진 파일과 숨겨진 디렉터리에 있는 파일은 고려되지 않습니다. 많은 쉘에는
dotglob
이를 다시 활성화할 수 있는 옵션이 있습니다.(D)
의 전역 한정자를 참조하세요zsh
. - 패턴 끝에 추가 할
zsh
수도 있습니다 . 복사만 하는 전역 한정자입니다.([1])
[1]
첫 번째파일을 일치시킵니다. -i
또한 이 옵션은 파일이 여러 디렉터리에 있는 경우 실수로 덮어쓰는 것을 방지합니다.cp
답변3
ZTE
를 사용하는 경우 다음 과 함께 와일드카드를 zsh
사용할 수 있습니다 .cp
zsh
cp **/Screenshot20180509143013.png /dev/media/SD256/DestinationFolder
**/Screenshot20180509143013.png
Screenshot20180509143013.png
현재 디렉터리에서 재귀적으로 검색을 시도합니다.
범용
find
일반적인 목적으로는 항상 +를 사용할 수 있습니다 cp
.
cp "$(find ./ -type f -name "<picture_name>" )" "<destination>"
find
- 파일을 검색합니다.
./
- 현재 디렉토리에서 검색합니다.
-type f
- 일반 파일로 검색을 제한합니다.
-name "<picture_name>"
- 이름이 있는 파일 검색 <picture_name>
( *
in은 <picture_name>
모든 순서와 일치하는 데 사용될 수 있음)
"$(find ./ -type f -name "<picture_name>" )"
- 코드의 이 부분을 stdout
of find
명령으로 바꿉니다.
cp "$(find ./ -type f -name "<picture_name>" )" <destination>
- 파일 경로를 "$(find ./ -type f -name "<picture_name>" )"
에 복사하세요 <destination>
.