첫 번째 문자를 기준으로 디렉터리를 하위 디렉터리로 이동합니다.

첫 번째 문자를 기준으로 디렉터리를 하위 디렉터리로 이동합니다.

디렉토리를 다른 위치로 이동하고 첫 글자를 기준으로 하위 디렉토리로 이동하고 싶습니다. 예: ./alpha는 /otherdir/a/로 이동합니다. ./beta는 /otherdir/b/로 이동합니다. 모든 하위 디렉터리가 생성되고 고정된 세트이므로 해당 하위 디렉터리를 확인하거나 생성하는 것에 대해 걱정할 필요가 없습니다. 내가 사용하고 싶은 결과 find . -type d -name "[a-z*]" 는 를 실행할 때 find . -type d -name "[a-z*]" | xargs mv -t /dest/모든 디렉터리가 이동되지만 물론 하위 디렉터리로 이동되지는 않는다는 것입니다. 구성 요소의 두 번째 매개 변수를 사용하여 /dest/first character here/각 디렉터리 이름의 첫 번째 문자를 전달할 수 있는지 모르겠습니다 . 이를 수행하는 방법이 있습니까, 아니면 a) 디렉토리 목록을 생성하고 b) 디렉토리 이름과 첫 번째 문자를 이동 명령에 전달하는 다른 방법이 있습니까?

답변1

사용할 이유가 없습니다 find(디렉토리 수가 엄청나지 않는 한).

dest_root='/otherdir'
for dir in [a-z]*; do
    [ -d "${dir}" ] && mv "${dir}" "${dest_root}/${dir:0:1}"
done

답변2

디렉토리의 첫 글자를 선택해야 합니다. find이는 루프에서 출력을 실행 하면 쉽게 수행됩니다. 예를 들어,

for i in $(find . -type d -name "[a-z]*")
do
    echo ${i:2:1}
done

이 명령은 선행하는 ./. 대상 디렉토리가 ../dest/a, ../dest/b등에 있다고 가정합니다 . echo명령을 다음으로 바꿀 수 mv있으며 위의 루프는 다음과 같이 될 수 있습니다.

destination="../dest"
for i in $(find . -type d -name "[a-z]*")
do
    mv ${i} ${destination}/${i:2:1}
done

목적지에 따라 조정해야합니다.

관련 정보