一部のタスクを自動化しようとすると、多くのフォルダを作成する必要がありますが、これには動的配列を使用するつもりです。どのように聞こえるか教えてください。
私のスクリプトの最初の部分は、次のコマンドを使用してディレクトリリストをエクスポートすることです。
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
各ファイル名を順番に設定します。