名前が部分文字列と一致するディレクトリを入力してください。

名前が部分文字列と一致するディレクトリを入力してください。

forループに複数のディレクトリを入力したいと思います。ディレクトリのフルネームはなく、一部だけを知っています。

端末に書いたようなことをしたいです。cd *IncompleteDirName*

これはループのMVEです:IncompleteDirNameget 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の世界出身なら、大文字と小文字は重要ではありません。Aand(またはそれに対応するWindows)というディレクトリを持つことができ、cd aそのディレクトリに移動します。欠点は、AWindowsシステムでディレクトリを呼び出すと、a同じディレクトリ内のディレクトリを呼び出すことができないことです。 Unixシステムではこれは適用されません。最初の文字が大文字で表示されないため(実際にホームフォルダにディレクトリ名がないcd ~/documents場合)、コンピュータは失敗する可能性があります。documents

しかし、私のサンプルスクリプトに見られるように、スクリプトのこの部分は間違いなく機能します。

おすすめ記事