複数のファイルを含むディレクトリがあります。特定の文字列を含む最新のファイルへのフルパスだけを知ることができます。
これを行うには、macOSで実行する必要があり、ディレクトリパスにスペースが含まれています。
cd
ディレクトリに最初に入らなくても、このbashコマンドを呼び出すことができるはずです。
注:ここで同様の質問を見たことがありますが、ディレクトリ内の最新のファイルに文字列が含まれていることを確認するだけです。これは、ディレクトリ内の2番目に近いファイルに、私が探している文字列が含まれていると失敗することを意味します。
私が苦労している理由の1つは、ディレクトリに空白があると問題が発生し、最後の修正順序で結果を返すフラグがないためですxargs
。find -exec
find
注:ファイルの内容にはファイル名ではなく文字列を含める必要があります。私はbashが他のbashスクリプトの一部であるため、これを使用したいのですが、bashでこれを行う方法も知りたいです。
ベストアンサー1
ファイル名から文字列を見つけるには:
print -rC1 -- the/directory/**/*string*(Nom[1])
コンテンツに以下が含まれている場合:
for f (the/directory/**/*(N.om)) grep -l -- string $f && break
(macosの古代バージョンであり、とにかくglob修飾子を持たないbashではなく、zshシェルがmacosのデフォルトの対話型シェルであるとします。)
これom
グローバル予選 o
ullglob の場合は、m
glob 拡張子を変更時間(最新のエントリから最も古いエントリの順に)で並べ替え、通常のファイルのみを並べ替えます.
。これらのファイルへの絶対パスが必要な場合は、そのパスを追加してください。N
N
:P
info zsh qualifiers
(またはまた、オンラインで最新バージョンのzshをダウンロードしてください。)もっと学ぶ。
Bash、sh、またはその他のシェルでは、いつでも次のことができます。
zsh -c 'any of those codes above'