![하위 폴더가 여러 개인 경우 파일 이름을 기준으로 파일을 하위 폴더로 이동하세요.](https://linux55.com/image/175333/%ED%95%98%EC%9C%84%20%ED%8F%B4%EB%8D%94%EA%B0%80%20%EC%97%AC%EB%9F%AC%20%EA%B0%9C%EC%9D%B8%20%EA%B2%BD%EC%9A%B0%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%95%98%EC%9C%84%20%ED%8F%B4%EB%8D%94%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EC%84%B8%EC%9A%94..png)
100개 이상의 하위 폴더( )가 있으며 P_XXX
각 폴더에는 세 개의 파일 세트( run1
, run2
및 run3
)가 포함되어 있습니다.
/Analysis
/P_076
/run1
/run2
/run3
swu_run1_P_076_vol_001.nii
swu_run1_P_076_vol_002.nii
swu_run2_P_076_vol_001.nii
swu_run2_P_076_vol_002.nii
swu_run3_P_076_vol_001.nii
swu_run3_P_076_vol_002.nii
/P_102
/run1
/run2
/run3
swu_run1_P_102_vol_001.nii
swu_run1_P_102_vol_002.nii
swu_run2_P_102_vol_001.nii
swu_run2_P_102_vol_002.nii
swu_run3_P_102_vol_001.nii
swu_run3_P_102_vol_002.nii
세 개의 파일 세트를 기존 하위 폴더 내의 자체 하위 폴더(run1, run2 및 run3)로 이동하고 싶습니다.
/Analysis
/P_076
/run1
swu_run1_P_076_vol_001.nii
swu_run1_P_076_vol_002.nii
/run2
swu_run2_P_076_vol_001.nii
swu_run2_P_076_vol_002.nii
/run3
swu_run3_P_076_vol_001.nii
swu_run3_P_076_vol_002.nii
/P_102
/run1
swu_run1_P_102_vol_001.nii
swu_run1_P_102_vol_002.nii
/run2
swu_run2_P_102_vol_001.nii
swu_run2_P_102_vol_002.nii
/run3
swu_run3_P_102_vol_001.nii
swu_run3_P_102_vol_002.nii
하위 폴더(P_XXX)에서 스크립트를 실행하면 다음 코드가 작동합니다.
for f in swu_run?_*.nii; do
num=${f:7:1}
mv "$f" run"$num"/
done'
for
그러나 각 하위 폴더에서 수동으로 실행하는 대신 상위 디렉터리(분석)에서 작동하도록 하는 적절한 루프를 찾는 데 어려움을 겪고 있습니다 . 나는 다음을 시도했다:
find . -type f -name '*.nii' -exec bash -c '
for f in swu_run?_*.nii; do
num=${f:7:1}
mv "$f" run"$num"/
done' bash {} +
오류 메시지가 반환됩니다.cannot stat 'swu_run?_*.nii': No such file or directory.
분석 폴더 수준에서 코드를 실행하여 각 P_XXX 하위 폴더를 세 개의 다른 하위 폴더(run1, run2, run3)와 일치하는 파일로 동시에 재구성하려면 어떻게 해야 합니까?
답변1
두 개의 루프를 사용할 수 있습니다 bash
.
cd /path/to/Analysis
shopt -s nullglob
for i in {1..3}; do
for f in */swu_run${i}_*.nii; do
mv "$f" "${f%/*}/run${i}/"
done
done
활성화된 nullglob
셸 옵션을 사용하면 */swu_run${i}_*.nii
일치하는 파일(이동 또는 누락)이 없는 경우 내부 루프가 입력되지 않습니다.
매개변수 확장은 ${f%/*}
가장 짧은 접미사 패턴을 제거하고 /*
경로는 상위 디렉토리로 남겨둡니다.