디렉터리로 이동하지 않고 고유한 이름을 가진 파일을 어떻게 복사할 수 있나요?

디렉터리로 이동하지 않고 고유한 이름을 가진 파일을 어떻게 복사할 수 있나요?

고유한 이름을 가진 파일이 있다고 가정해 보겠습니다(예:스크린샷 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 globstaryash -o extended-glob

cp -- **/Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder

globstar는 **구문을 사용하여 재귀 검색을 수행합니다. glob의 나머지 부분(파일 이름 패턴)이 고유하면 원하는 결과를 얻을 수 있습니다. 예를 들어 ...3*3질문 앞부분의 파일 이름 대신 귀하의 예에서 복사했습니다 .Screenshot20180509143013.png

알아채다:

  • fish4.3 이전 버전의 bash는 반복할 때 심볼릭 링크를 따릅니다. zsh, tcsh또는 를 사용하면 이 동작을 대신 yash사용할 수 있습니다 .*****
  • fish파일이 현재 디렉터리에 있으면 파일을 찾을 수 없습니다.
  • 숨겨진 파일과 숨겨진 디렉터리에 있는 파일은 고려되지 않습니다. 많은 쉘에는 dotglob이를 다시 활성화할 수 있는 옵션이 있습니다. (D)의 전역 한정자를 참조하세요 zsh.
  • 패턴 끝에 추가 할 zsh수도 있습니다 . 복사만 하는 전역 한정자입니다.([1])[1]첫 번째파일을 일치시킵니다.
  • -i또한 이 옵션은 파일이 여러 디렉터리에 있는 경우 실수로 덮어쓰는 것을 방지합니다.cp

답변3

ZTE

를 사용하는 경우 다음 과 함께 와일드카드를 zsh사용할 수 있습니다 .cpzsh

cp **/Screenshot20180509143013.png /dev/media/SD256/DestinationFolder

**/Screenshot20180509143013.pngScreenshot20180509143013.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>" )"- 코드의 이 부분을 stdoutof find명령으로 바꿉니다.

cp "$(find ./ -type f -name "<picture_name>" )" <destination>- 파일 경로를 "$(find ./ -type f -name "<picture_name>" )"에 복사하세요 <destination>.

관련 정보