私のディレクトリからいくつかのファイルをどのようにフィルタリングできますか?

私のディレクトリからいくつかのファイルをどのようにフィルタリングできますか?

私のディレクトリにいくつかのファイルがあります。 2つのカテゴリに分けることができます。最初のカテゴリのファイル名パターンは、1000-24-1-7-14つのダッシュで区切られた5つの数字です。 2番目のカテゴリのファイル名パターンは似ており、abcd-1000-24-1-7-1-efgh-ijklダッシュで区切られていますが、前または後に文字があります。それ。

私の質問は、これらのファイルを自分のディレクトリの最初のカテゴリにあるディレクトリに移動してフィルタリングする方法ですfirst-class

ベストアンサー1

一部のシェルでは、拡張globbing +特定のフラグを使用して一致させることができますクラス1
そしてbash

shopt -s extglob
for one in +([0-9])-+([0-9])-+([0-9])-+([0-9])-+([0-9])
    do
        [[ -f $one ]] && mv -- "$one" first-class
    done

+(<PATTERN>)指定されたパターンに一致する項目を1つ以上一致させ、[[ -f ... ]]通常のファイルをテストします。その場合は、mv-edをfirst-class実行してください。試運転echo前に追加されましたmv

そしてzsh

setopt extended_glob
mv -t first-class [0-9]##(-[0-9]##)(#c4)(.)

x##1つ以上のパターン一致を一致させますx(#cN)正確なN一致が必要で、(.)ファイルのみ一致する必要があります
。または:

autoload zmv
zmv -Q '[0-9]##(-[0-9]##)(#c4)(.)' first-class

-Q裸のグローバル修飾子をオンにします。試運転-nたとえば、追加します。zmv -Qn ...


一般ファイルをフィルタリングする必要がない場合は、テストを選択しないままにしておくことができますbash

shopt -s extglob
mv -- +([0-9])-+([0-9])-+([0-9])-+([0-9])-+([0-9]) first-class

(.)修飾子がない場合zsh

setopt extended_glob
mv -t first-class [0-9]##(-[0-9]##)(#c4)

または

autoload zmv
zmv '[0-9]##(-[0-9]##)(#c4)' first-class

おすすめ記事