각 디렉토리의 일부 파일을 다른 디렉토리로 이동

각 디렉토리의 일부 파일을 다른 디렉토리로 이동

중복 가능성:
유형별로 파일을 디렉터리 및 하위 디렉터리에서 다른 디렉터리로 재귀적으로 이동하는 방법은 무엇입니까?

저는 Linux, 특히 셸과 모든 명령을 처음 접했습니다. 내 목표는 각 디렉터리의 일부 파일을 다른 디렉터리로 이동하는 것입니다. 더 명확하게 말하면 다음과 같습니다.

/DIR  
- /dir1  
  - file1  
  - file2  
  - ...  
- /dir2  
  - file1  
  - file2  
  - ...  
- ...  
- /dirn  
  - file1  
  - file2  
  - ... 

나에게 필요한 것은 모든 file1과 file2를 자체 디렉터리 내의 새 디렉터리로 이동하여 다음과 같은 결과를 얻는 것입니다.

/DIR  
- /dir1
  - /mydir
      - file1  
      - file2  
  - ...  
- /dir2
  - /mydir
      - file1  
      - file2  
  - ...  

이 질문에 대해서는 디렉토리 이름이 "dir1", "dir2" 등과 같은 것이 아니라 임의의 이름이라고 말해야 합니다. 그러나 파일 이름은 항상 동일합니다(models.py 및 Wrappers.py). 당신의 도움을 주셔서 감사합니다.
추신: 단순히 코드를 복사하여 붙여넣는 대신 Linux에 대해 더 잘 이해할 수 있도록 답변을 설명해 주시면 정말 감사하겠습니다.

답변1

cd DIR 
for dir in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n" )
do
    cd $dir
    mkdir -p mydir
    mv *.py mydir
    cd ..
done

cd를 최상위 디렉토리로 이동합니다. find 명령은 제공된 기준과 일치하는 모든 파일을 찾아서 인쇄합니다. MaxDepth 및 MinDepth는 검색을 DIR 바로 아래의 파일로 제한하는 반면 Type은 결과 목록을 디렉터리로 제한합니다. for 루프를 사용하여 find 명령으로 반환된 각 디렉터리를 반복합니다. 각 디렉터리로 cd하고, mydir 하위 디렉터리를 만들고, 파일을 그 디렉터리로 옮긴 다음, 다음 반복에서 다음 디렉터리를 처리할 수 있도록 다시 DIR로 cd합니다.

DIR 아래에 *.py를 포함하지 않는 다른 디렉터리가 있는 경우 cd $dir 줄 위에 if 문을 삽입하여 해당 디렉터리를 건너뛸 수 있습니다.

if [ "$dir" = "skip" -o "$dir" = "whatever" ]; then continue; fi

관련 정보