다음 이름을 가진 여러 디렉터리가 있습니다.
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
.mv
find /path/to/directories -type d -empty -exec rmdir {} \;
답변3
내가 제안하는 솔루션:
Bash 배열의 모든 디렉터리 목록을 수집합니다. 이와 같이
dirs=($(ls *.frames))
배열에 모든 디렉토리 이름이 포함됩니다.다음과 같은 것을 사용하여 전체 범위에 걸쳐 루프를 실행합니다.
for i in ${$dirs[@]}; do......
루프 내에서 어딘가에 새 디렉터리를 만들고 현재 디렉터리의 모든 파일을 해당 위치로 이동합니다. 그것은 마치
for i in ${$dirs[@]}; do mkdir dir_$i mv ($i)/*.raw dir_$i/ done
약간의 조정이 필요할 수 있지만 이것이 효과가 있을 것이라고 확신합니다.
추신 - 새 디렉터리를 만드는 더 좋은 방법을 시도해 보세요. :P