GNU/Linux >> Linux の 問題 >  >> Linux

Readynas Duo V1でファイルをアルファベット順のフォルダに並べ替えるBashスクリプト?

未知の種類のLinuxを実行している古いReadyNASDuov1(Sparc)があります。

1,000以上のファイルを含むフォルダー構造があり、ファイル名の最初の文字に基づいてフォルダー構造に移動します(大文字と小文字は区別されません)。

理想的には、ファイル構造を次のようにしたいと思います:

myfiles-+
        +-A
          + Apple.txt
          + avocado.txt
        +-B
          + Banana.txt
          + broccoli.txt
etc. etc.

私はGoogleを持っていましたが、GUIツールしか見つかりませんでした。

これは、コマンドラインまたはスクリプトを介して実行できますか?

承認された回答:

これがあなたが望むことをするワンライナーのビットです:

$ mkdir -p output/{A..Z}; for i in tstdir/*; do export FILE=$(basename "$i");  LTR=$(echo" ${FILE:0:1}" | tr [a-z] [A-Z]); mv "$i" "output/$LTR/$FILE" ; done

何が起こっているかを確認できるように、展開された形式の同じコマンドを次に示します。

$ mkdir -p output/{A..Z}
$ for i in tstdir/*; do 
    FILE=$(basename "$i")  
    LTR=$(echo "${FILE:0:1}" | tr [a-z] [A-Z])
    mv "$i" "output/$LTR/$FILE"
  done

詳細

上記は最初に、文字だけの出力ディレクトリが存在しないことを前提としているため、それを作成します。

$ mkdir -p output/{A..Z}

for ループは次のように機能し、tstdir/*内のすべてのファイルをループします 。次に、basenameを決定します このパスの名前を変数$FILEに格納します 。ループの各反復は、変数$iに格納されます。 。

FILE=$(basename "$i")

次に、Bashes機能を使用して、名前付き変数$FILEの最初の文字を返します。 、次にtrを使用します 小文字を大文字に変換します。

LTR=$(echo "${FILE:0:1}" | tr [a-z] [A-Z])

これをもう少し詳しく説明します:

$ echo "${FILE:0:1}"
s
$ echo "${FILE:0:1}"
T

trを使用 何が起こっているかを確認できるコード:

$ echo "${FILE:0:1}" | tr [a-z] [A-Z]
S
$ echo "${FILE:0:1}" | tr [a-z] [A-Z]
T

コマンドの残りの部分は、ファイルを対応する最初の文字のディレクトリに移動するだけです。

次のファイルディレクトリがあるとします:

$ touch {a-z}file {A-Z}file

$ tree tstdir/ | head -10
tstdir/
|-- afile
|-- Afile
|-- bfile
|-- Bfile
|-- cfile
|-- Cfile
|-- dfile
|-- Dfile
|-- efile
...

ワンライナーを実行した後:

$ tree output/ | head -10
output/
|-- A
|   |-- afile
|   `-- Afile
|-- B
|   |-- bfile
|   `-- Bfile
|-- C
|   |-- cfile
|   `-- Cfile
...

Linux
  1. アルファベット順に並べ替えたときに N 個のファイルを除くすべてを削除する Bash スクリプト

  2. bash:リスト ファイルを変数に入れますが、配列のサイズは 1 です

  3. bashスクリプトで最新の3つを除くすべてのファイルを削除します

  1. ファイルがbashスクリプトの特定のディレクトリに存在するかどうかを確認するには?

  2. Bash スクリプトのパターン マッチング

  3. jenkins パイプラインで bash コマンドを実行する

  1. Bashスクリプトをデバッグする方法は?

  2. Bashスクリプトの変数に改行を追加する方法は?

  3. bash での並べ替え