itsource

모든 하위 디렉터리에서 특정 확장명의 모든 파일 복사

mycopycode 2023. 5. 2. 22:41
반응형

모든 하위 디렉터리에서 특정 확장명의 모든 파일 복사

unix에서는 특정 확장자를 가진 모든 파일(모든 엑셀 파일)을 모든 하위 디렉터리에서 다른 디렉터리로 복사합니다.다음과 같은 명령이 있습니다.

cp --parents `find -name \*.xls*` /target_directory/

이 명령의 문제는 다음과 같습니다.

  • 디렉토리 구조도 복사하고 파일만 원합니다(모든 파일이 /target_directory/로 끝나야 함).

  • 파일 이름에 공백이 있는 파일은 복사하지 않습니다(이들은 꽤 많습니다).

이 문제들에 대한 해결책이 있습니까?

--parents디렉터리 구조를 복사하는 것이므로 제거해야 합니다.

당신이 이 글을 쓴 방식은find실행되고, 출력은 명령행에 배치됩니다.cp파일 이름을 구분하는 공백과 파일 이름 내의 공백을 구분할 수 없습니다.같은 것을 하는 것이 좋습니다.

$ find . -name \*.xls -exec cp {} newDir \;

어느 곳에서cp의 각 파일 이름에 대해 실행됩니다.find파일 이름을 찾아서 올바르게 전달했습니다. 기술에 대한 자세한 내용은 다음과 같습니다.

위의 모든 것 대신에, 당신은 zsh를 사용할 수 있고 간단하게 입력할 수 있습니다.

$ cp **/*.xls target_directory

zsh와일드카드를 확장하여 하위 디렉터리를 포함할 수 있으며 이러한 작업을 매우 쉽게 수행할 수 있습니다.

위의 모든 것들로부터, 저는 이 버전을 생각해냈습니다.이 버전은 Mac 복구 터미널에서도 사용할 수 있습니다.

find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';'

현재 디렉터리에서 xsl 확장자가 있는 파일을 재귀적으로 모든 하위 디렉터리에서 찾습니다.대상 디렉터리에 모두 복사됩니다.

cp 플래그는 다음과 같습니다.

  • p - 파일의 속성 유지
  • r - 재귀적인
  • v - verbose(복사할 내용을 알려줍니다)

저도 비슷한 문제가 있었습니다.다음을 사용하여 해결했습니다.

find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";"

'{}'그리고.";"각 파일에서 복사본을 실행합니다.

저도 이것을 직접 해야만 했습니다.저는 cp:에 대한 --parents 인수를 통해 그것을 했습니다.

find SOURCEPATH -name filename*.txt -exec cp --parents {} DESTPATH \;

2022년 zsh 솔루션은 Linux Bash에서도 작동합니다.

cp **/*.extension /dest/dir

예상대로 작동합니다.

find [SOURCEPATH] -type f -name '[PATTERN]' | 
    while read P; do cp --parents "$P" [DEST]; done

--parents를 제거할 수 있지만 여러 파일이 동일한 이름을 가질 경우 충돌 위험이 있습니다.

macOS Ventura 13.1, zsh에서 복사할 파일이 너무 많을 때 다음 오류를 보았습니다.

zsh: argument list too long: cp

사용해야 함find와 함께 지휘함.cp파일을 대상으로 복사하려면:

find ./module/*/src -name \*.java -print | while read filelocation; do cp $filelocation mydestinationlocation; done

언급URL : https://stackoverflow.com/questions/15617016/copy-all-files-with-a-certain-extension-from-all-subdirectories

반응형