forループに複数のディレクトリを入力したいと思います。ディレクトリのフルネームはなく、一部だけを知っています。
端末に書いたようなことをしたいです。cd *IncompleteDirName*
これはループのMVEです:IncompleteDirName
get from file IncompleteDirNames
。
cont=1
sum=1
while read anotherFILE; do
IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames)
cd *"${IncompleteDirName}"*
# Do stuff
cd ..
cont=$((cont + sum))
done <anotherFILE
これはうまくいきません。ワイルドカードが拡張されていないか、変数が正しく機能していないかどうかはわかりません。
次のエラーメッセージが表示されます。
*:対応するファイルやディレクトリはありません。
これは、アスタリスクが期待どおりに機能しないことを意味すると思います。ディレクトリに入らず、各パターンに一致するディレクトリが1つずつあります。とにかくディレクトリが入力されていません。
ファイルは次のとおりですIncompleteDirNames
。
Alicante
Almeria
Andalucia
Avila
これは名前のリストです。上記のsに対応するディレクトリ名は次のとおりですIncompleteDirName
。
aa4fas_Alicante_com
mun_Almeria
comunidadde_Andalucia
ciuAvila
ベストアンサー1
スクリプトのこの部分は間違いなく機能します。次のテストスクリプトを実行すると、簡単に見つけることができます。
#/bin/sh
cd
IncompleteDirName="ment"
cd *"${IncompleteDirName}"*
date > testFile
最初の行はshebangです。 2行目はホームディレクトリに切り替わります。というフォルダが必要ですDocuments
。 3行目では、変数をの部分IncompleteDirName
文字列として定義しますDocuments
。 4行目はスクリプトからコピーされます。 5行目は現在のデータをファイルの現在の場所に書き込みますtestFile
。
フォルダtestFile
にファイルが表示されることがありますDocuments
。
Rakesh Sharmaがすでに答えや使用方法で指摘したように、問題はスクリプトによって異なる可能性があります。考えられるシナリオは次のとおりです。
- 一部のキャラクターは似ているか同じように見えます。たとえば、
Α
ラテン語ではなく大文字のアルファですA
。このページで検索してA
すべての結果を強調表示すると、A
その結果は強調表示されますが、Α
強調表示されません。同様に、ディレクトリ名の部分文字列であると考えるのは、実際にはディレクトリ名の部分文字列ではないため、一致するものがない可能性があります。 - 大文字の使用の問題。 Windowsの世界出身なら、大文字と小文字は重要ではありません。
A
and(またはそれに対応するWindows)というディレクトリを持つことができ、cd a
そのディレクトリに移動します。欠点は、A
Windowsシステムでディレクトリを呼び出すと、a
同じディレクトリ内のディレクトリを呼び出すことができないことです。 Unixシステムではこれは適用されません。最初の文字が大文字で表示されないため(実際にホームフォルダにディレクトリ名がないcd ~/documents
場合)、コンピュータは失敗する可能性があります。documents
しかし、私のサンプルスクリプトに見られるように、スクリプトのこの部分は間違いなく機能します。