.html
またはではないファイルのbashでリストを作成しようとしています.js
私は次の両方の方法に疲れましたが、どちらも機能しませんか?
ls !(*.html|*.js)
ls | grep -v '\.(html|js)$'
それを行うにはさらに別の方法があります。bashには、拡張グロブパターンのオプションがあります。
shopt -s extglob
ls !(*.html|*.js)
(これはまだ正規表現ではなくグロブパターンであることに注意してください。たとえば、*
「前のもののゼロ以上」ではなく、「任意の文字列」を意味します)。
お使いのバージョンがフラグをls
サポートしている場合:-I
ls -I *.js -I *.html
マニュアルページから:
-I, --ignore=PATTERN
do not list implied entries matching shell PATTERN
それ以外の場合は、:を使用しfind
ます
find . -maxdepth 1 -type f ! \( -name "*.html" -o -name "*.js" \)
フォーマットについては、以下を追加します。
-printf "%f\n"
ファイル名をパイプする必要がある場合は、printf()
ステートメントを変更するだけで済みます。
-printf '%f\0' | xargs -0 ...
オプションと一緒に使用extended-regexp
し-E
ます:
ls | grep -E -v '\.(html|js)$'
-I
フラグはls
出力をフィルタリングできます。
ls -I '*.html' -I '*.js'
また
ls | grep -v -e '\.html' -e '\.js'
マニュアルページから:
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect patterns beginning with -.