디렉토리를 다른 위치로 이동하고 첫 글자를 기준으로 하위 디렉토리로 이동하고 싶습니다. 예: ./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
목적지에 따라 조정해야합니다.