私は元の質問にいくつかの良い答えを受け取り、@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」の場所にあるファイルに対して機能するように上記のコマンドを調整することはできません。なぜなら、
AddPath.sh TrialList.txt > TargetFile.txt
このスクリプトを何十回も使う必要があるからです。ファイル。私の無知を克服するのを手伝ってください。私がファイルパスを作成しなければならなかったほとんどのファイルは、一般的に
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"
。これにより、キャリッジリターンが行末にコピーされるのを防ぎます。