폴더 및 하위 폴더의 파일을 동일한 대상 폴더로 이동

폴더 및 하위 폴더의 파일을 동일한 대상 폴더로 이동

.txt파일 형식을 특정 폴더로 이동하는 스크립트가 있습니다 . 작업 폴더에서 파일을 찾아 완성된 폴더로 이동합니다.

예를 들어 .txt폴더 /tmp/swan/test/work및 폴더 에 파일이 있는 경우 /tmp/swan/test11/work해당 파일을 각각 /tmp/swan/test/completed및 로 이동해야 합니다 /tmp/swan/test11/completed.

.txt또한 하위 폴더에 해당 파일이 있으면 /tmp/swan/test11/work/APX해당 파일도 으로 이동해야 합니다 /tmp/swan/test11/completed.

아래는 내 스크립트입니다. 이제 스크립트는 작업 폴더에서 파일을 올바르게 이동하지만 하위 폴더(즉, 작업/완료 폴더)에서 해당 완료 폴더로 파일을 이동하지 않습니다.

#!/bin/bash

MY_DIR=/tmp/swan

cd $MY_DIR
find . -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' ../completed \;

답변1

가설

  • 중첩된 작업 디렉터리가 아님
  • 흥미로운 이름이 없습니다

노력하다

MY_DIR=/tmp/swan

cd $MY_DIR

for w in */work 
do 
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

이렇게 하면 파일이 "work"와 동일한 세 번째 이름인 "completed"라는 네 번째 수준 디렉터리로 전송됩니다.

작업 디렉터리가 중첩되지는 않았지만 임의 수준에 있는 경우

MY_DIR=/tmp/swan

cd $MY_DIR

find $MY_DIR -type d -name \*work\* -print | while read w 
do 
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

관련 정보