파일을 다른 위치로 복사

파일을 다른 위치로 복사

다음 이름을 가진 여러 디렉터리가 있습니다.

15mar20a_00021sq_v01_00019en.frames
15mar20a_00021sq_v01_00020en.frames 
and so on...

각 파일에는 .raw 확장자를 가진 7개의 파일이 포함되어 있습니다. 디렉터리 중 하나에 있는 파일의 예는 다음과 같습니다.

IntermediateImage_20150320_180411_n0.raw
IntermediateImage_20150320_180411_n1.raw
IntermediateImage_20150320_180411_n2.raw
...until n7.raw

스크립트가 각 디렉터리로 이동하여 .raw상위 디렉터리 외부의 새 디렉터리에 파일을 복사하여 .raw전체 연습이 끝날 때 모든 파일을 같은 위치에 보관할 수 있기를 원합니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

*frames디렉토리가 모두 동일한 디렉토리에 있다고 가정하면 다음과 같이 할 수 있습니다.

cd to/the/parent/of/the/frames/dirs
mkdir all-my-raws
cp *.frames/*.raw all-my-raws/

파일 중복을 방지하려면 cp으로 대체 ln하고 동일한 데이터에 대한 새 링크만 생성할 수 있습니다.

답변2

이런 목적으로 사용할 수 있습니다 find.

find /path/to/directories -type f -name "*.raw" -exec cp {} /new/path \;

파일을 복사하는 대신 이동하려면 파일을 이동한 후 다음을 사용하여 빈 디렉터리를 삭제할 수 있습니다 cp.mvfind /path/to/directories -type d -empty -exec rmdir {} \;

답변3

내가 제안하는 솔루션:

  1. Bash 배열의 모든 디렉터리 목록을 수집합니다. 이와 같이 dirs=($(ls *.frames)) 배열에 모든 디렉토리 이름이 포함됩니다.

  2. 다음과 같은 것을 사용하여 전체 범위에 걸쳐 루프를 실행합니다. for i in ${$dirs[@]}; do......

  3. 루프 내에서 어딘가에 새 디렉터리를 만들고 현재 디렉터리의 모든 파일을 해당 위치로 이동합니다. 그것은 마치

    for i in ${$dirs[@]}; do
        mkdir dir_$i
        mv ($i)/*.raw dir_$i/
    done
    

약간의 조정이 필요할 수 있지만 이것이 효과가 있을 것이라고 확신합니다.

추신 - 새 디렉터리를 만드는 더 좋은 방법을 시도해 보세요. :P

관련 정보