여러 디렉터리에 걸쳐 폴더 구조 이동

여러 디렉터리에 걸쳐 폴더 구조 이동

한 번에 여러 파일을 한 디렉토리 위로 이동하려고 합니다.

내가 성공하지 못한 채 시도한 것은 다음과 같습니다.

mv ./*/__test__/index.js ./*/data.js

.
├── alpha
│   ├── __test__
│   │   └── index.js
│   ├── index.js
│   └── test.js
└── beta
    ├── __test__
    │   └── index.js
    ├── index.js
    └── test.js

이와 관련하여:

.
├── alpha
│   ├── data.js
│   ├── index.js
│   └── test.js
└── beta
    ├── data.js
    ├── index.js
    └── test.js

유닉스에서는 어떻게 할 수 있나요?

답변1

대상 매개변수에는 와일드카드 문자를 사용할 수 없습니다. 따라서 최소한 일부 스크립트가 필요합니다.

for d in *; do
    if [[ -d "$d" ]]; then
        pushd "$d"
        mv __test__/index.js ./data.js
        popd
    fi
done

답변2

다음은 파일 이동의 예입니다.

for f in $(find -name index.js | grep __test__ ); do echo $f; destination=$(echo $f | awk 'BEGIN{FS="/"} {print $2}'); mv ${f} ./$destination/data.js; done

나는 이것을 테스트했고 예상대로 이동을 수행합니다.

답변3

find . -path '*/__test__/*' -type f -name "index.js" \ 
    -execdir echo mv -vt ../data.js {} \;

파일에 대한 명령을 실행 echo하기 위한 시험 실행 관련 항목을 제거했습니다 .mv

답변4

s를 제거하면 echo실제로 바뀔 수 있습니다.

for i in */__test__/index.js; do
    echo mv -v "$i" "${i%%/*}/data.js"
    echo rm -vr "${i%/*}"
done

앞으로

.
├── alpha
│   ├── index.js
│   ├── __test__
│   │   └── index.js
│   └── test.js
└── beta
    ├── index.js
    ├── __test__
    │   └── index.js
    └── test.js

뒤쪽에

.
├── alpha
│   ├── data.js
│   ├── index.js
│   └── test.js
└── beta
    ├── data.js
    ├── index.js
    └── test.js

관련 정보