を使用find
して、ワイルドカードで制限された一連のフォルダー内のファイルを検索しますが、パス名にスペースが含まれています。
コマンドラインから、これは簡単です。次の例はすべて機能します。
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
これらは、たとえば、terminal/my files/more
およびでファイルを検索しますtepid/my files/more
。
ただし、これをスクリプトの一部にする必要があります。私が必要なのは次のようなものです:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
残念ながら、find
スクリプト内のコマンドでワイルドカードとスペースを混在させることはできません。上記の例は、次のエラーを返します(バックスラッシュの予期しない二重化に注意してください)。
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
引用符を使用しようとしても失敗します。
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
これは、引用符の意味を無視して、次のエラーを返します。
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
もう1つの例を示します。
SEARCH='te*/my files/more'
find ${SEARCH} -print
予想通り:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
私が試したすべてのバリエーションはエラーを返します。
回避策がありますが、あまりにも多くのフォルダーが返されるため、潜在的に危険です。すべてのスペースを次のように疑問符(1文字のワイルドカード)に変換します。
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
これは以下と同等です。
find te*/my?files/more -print
これにより、正しいフォルダだけでなくも返さterse/myxfiles/more
れます。
自分がやろうとしていることをどのように達成できますか?グーグルは私を助けていません:(
find "${SEARCH}" -print
?
te*/'my files'/more
。
SEARCH: command not found
コマンドfind -print
を実行すると、コマンドが実行されます。