ディレクトリを別の場所に移動し、最初の文字に基づいてサブディレクトリに移動したいと思います。例: ./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
目的地に合わせて調整してください。