「_Variable_フォルダ名をファイルリストに追加する前」のフォローアップ

「_Variable_フォルダ名をファイルリストに追加する前」のフォローアップ

私は元の質問にいくつかの良い答えを受け取り、@Giles Quenotが提供するbashソリューションを使用することにしました。

#!/bin/bash

str=$(<file)

for i in $str; do
    if [[ $i =~ ^[A-F][A-Z][0-1] ]]; then
        echo "${i:0:2}/$i.jpg"
    fi
done

以下を含むテキストファイルを変換します。

AF002
AI003
AA001
AD005
AD006
AI002

入力する

AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

しかし、私はbashスクリプトを作成し、AddPath.sh完全に初心者に関連する2つの質問があります。

  1. スクリプト名の後の「1」の場所にあるファイルに対して機能するように上記のコマンドを調整することはできません。なぜなら、AddPath.sh TrialList.txt > TargetFile.txtこのスクリプトを何十回も使う必要があるからです。ファイル。私の無知を克服するのを手伝ってください。

  2. 私がファイルパスを作成しなければならなかったほとんどのファイルは、一般的にNO NAME...と呼ばれるSanDiskサムドライブにあることがわかりました。今推奨スクリプトのエコーラインを追加します echo "NO NAME/${i:0:2}/$i.jpg"

    NO NAME/AF/AF002
    .jpg
    NO NAME/AI/AI003
    .jpg
    NO NAME/AA/AA001
    .jpg
    NO NAME/AD/AD005
    .jpg
    NO NAME/AD/AD006
    .jpg
    NO NAME/AI/AI002
    .jpg
    

もしそうなら、再び言うが、おそらく純粋な初心者の愚かさであろう。助けてください。

答え1

ああ!実際に問題を自分で解決しました!

問題(2)は、何らかの理由で$ i変数に元のリストの行の末尾にキャリッジリターンが含まれていることです。以前ではなく、今スクリプトがなぜそうするのかは不明ですが、ここまでです。echo "NO NAME/${i:0:2}/$i.jpg"を交換してこの問題を解決しましたecho "NO NAME/${i:0:2}/${i:0:5}.jpg"。これにより、キャリッジリターンが行末にコピーされるのを防ぎます。

関連情報