正規表現または名前を使用して名前で範囲内のファイルを検索する

正規表現または名前を使用して名前で範囲内のファイルを検索する

「screenshot-2010-13-12.jpg」という名前の2008年のスクリーンショットがいくつかあります。 2010年から2019年までのスクリーンショットをコピーする必要があります。 -nameと-regexのさまざまなオプションを試しましたが、方法が見つかりませんでした。正規表現の唯一の成功は、形式別に見つけることだけです。

答え1

フォーマットに厳密に準拠するには、次のコマンドを使用できます。

find . -name "screenshot-201[0-9]-??-??.jpg" -type f

で始まる名前screenshot-201、数字、ダッシュ、2文字、ダッシュ、2文字、.jpg

答え2

目的の日付範囲に昇格するには、zsh次の手順を実行します。

cp screenshot-????-??-??.jpg(.e['
  [[ $REPLY >= screenshot-2010-02-12.jpg &&
     $REPLY <= screenshot-2019-09-21.jpg ]]']) /some/dir/

または:

cp screenshot-????-??-??.jpg(.e['
  [[ ${REPLY//[^0-9]} = <20100212-20190921> ]]']) /some/dir/

.たとえば、2010-02-12から2019-09-21の範囲の一般的なファイルをコピーします。

現在の作業ディレクトリにはありませんが、すべてのレベルのサブディレクトリで検索する必要がある場合:

cp -i -- **/screenshot-????-??-??.jpg(.e['
  [[ $REPLY:t >= screenshot-2010-02-12.jpg &&
     $REPLY:t <= screenshot-2019-09-21.jpg ]]']) /some/dir/

-iディレクトリに同じ名前の複数のファイルが見つかる危険性を減らすためにここに追加します。)

関連情報