最初の文字に基づいてディレクトリをサブディレクトリに移動します。

最初の文字に基づいてディレクトリをサブディレクトリに移動します。

ディレクトリを別の場所に移動し、最初の文字に基づいてサブディレクトリに移動したいと思います。例: ./alpha は /otherdir/a/ に移動します。 ./beta は /otherdir/b/ に移動します。すべてのサブディレクトリが作成され固定されたセットであるため、そのサブディレクトリを確認または作成することを心配する必要はありません。私が使用したい結果は、 find . -type d -name "[a-z*]" 実行時に find . -type d -name "[a-z*]" | xargs mv -t /dest/すべてのディレクトリが移動されますが、もちろんサブディレクトリに移動されるわけではありません。コンポーネントの2番目のパラメータを使用して、/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

目的地に合わせて調整してください。

関連情報