find
結果を正規表現と一致させる必要があります。ファイルは次のとおりです。
/path/1/file1.001.txt
/path/1/file2.001.txt
/path/1/file1.001
/path/2/file3.002.txt
/path/2/pure_file3.002.txt
など。
xxx.txt
where is 3桁の数字で終わるすべてのディレクトリ内のすべてのファイルを一致させる必要があり、xxx
前に単語が含まれていないファイル名のみを一致させる必要がありますpure_
。また、フルパスを返す必要があります。
次のファイルを除くすべての操作を実行しましたpure_
。
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.*\.[0-9]{3}.txt'
私は試した:
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.+(?!pure).*\.[0-9]{3}.txt'
しかし、私が言うなら/path/1/
:
ls -1 | grep -P '^(?!pure).*\.[0-9]{3}.txt'
一方、次のファイルは正しく除外されます。
ls -1 | grep -P '(?!pure).*\.[0-9]{3}.txt'
確かに。
それで、それはおそらく始まらないフルパスでどのように一致させるかによって異なりますpure_
。私は正規表現を十分に理解していません。
ベストアンサー1
find
正規表現一致なし:
find /path -type f ! -name 'pure_*' -name '*[0-9][0-9][0-9].txt'
/path
名前は3pure_
桁の数字と.txt
。