![テキスト リストを動的配列に読み込みますか?](https://rvso.com/image/154485/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%8B%95%E7%9A%84%E9%85%8D%E5%88%97%E3%81%AB%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
いくつかの作業を自動化しようとしています。これには多くのフォルダー生成が含まれますが、これを行うには動的配列を使用することを考えていました。これがどのように機能するかをお知らせください。
私のスクリプトの最初の部分は、以下を使用してディレクトリ リストをエクスポートすることです。
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
予想通りの出力が得られます:
Folder With Some Long Title
Folder With Another Long Title
この例では (2) のみを示しましたが、フォルダーは 1500 個以上ある可能性があり、サーバー上に他のフォルダーを作成し、元のフォルダー名に基づいて自動的に名前を付けるコマンドを既に作成していますが、問題は、スクリプトですべてのフォルダーをインデックスしてコマンド (主に文字列操作などである約 8 つ) を実行することです。そこで、ディレクトリ内のアイテムの数を取得して上記のテキスト ファイルに書き込み、FOR ループを使用して、8 個程度のコマンドを含む回数だけ実行することを考えていました。何か考えやより良いアイデアはありますか? 次の方法でカウントを取得できます。
wc -l FolderList.txt | awk '{ print $1 }'
しかし、動的配列を作成または管理し、それを for ループで使用してコマンドにインデックスを付ける方法がわかりません。
以下は、これに付随するスクリプトの一部です。現在、モジュール テスト用に一部がコメント アウトされています。
#TestString="Customer Info (YEAR) [PMNAME] [OWNERNAME] [EETYPE]"
cd "/home/USER/Downloads/"
ls /home/USER/Downloads/ > "/home/USER/Desktop/scripts/FolderList.txt"
wc -l FolderList.txt | awk '{ print $1 }'
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
答え1
コマンドとコメントから判断すると、実行したいことは次のとおりです。
for TestString in /home/USER/Downloads/*
do
#CUSTINFO=${TestString/(*)*}
#YEAR=$(grep -o '(.*)' <<<"$TestString")
#RESO3=$(grep -o '\[.*\]' <<<"$TestString")
#RESO2=${RESO3//\[PMNAME\]/}
#RESO_FINAL=${RESO2//\[EETYPE\]/}
#FULL_NAME=$TITLE_FINAL$CUSTINFO$YEAR
#mv "/home/USER/Downloads/$DOWNLOAD_NAME" "/home/USER/Downloads/$FULL_NAME"
#for f in */* ;do fp=$(dirname "$f"); ext="${f##*.}" ; mv "$f" "$fp"/"$fp"."$ext" ;done
done
外側の for ループは、/home/USER/Downloads/
(ワイルドカード展開によって)内のファイルをループし、TestString
順番に各ファイル名を設定します。