4

「abcdefg_y_zz.jpg」のような名前のファイルがいくつかあります。「abcdefg」は一連の数字で、「y」と「zz」は文字です。10 より大きい数字で終わる一連の数字を持つすべてのファイルを取得する必要があります。「fg」が 10 より大きいファイルです。

誰かがbashスクリプトでそれを行う方法について考えを持っていますか?

4

6 に答える 6

2

わかりました、技術的には、すべての情報に基づいて...

ls | grep '[0-9]{5}[1-9][0-9]_[[:alpha:]]_[[:alpha:]]{2}.jpg'

于 2012-07-27T19:45:48.143 に答える
1

これはどう?位置 f に 0 があるものを除外するだけです。

ls -1 | grep -v "?????0?_?_??.jpg"

更新 >= 10ではなく> 10が必要なため、10も除外する必要があります。だからこれをしてください:

ls -1 | grep -v "?????0*_?_??.jpg" | grep -v "??????10_?_??.jpg"
于 2012-07-27T19:26:14.963 に答える
0

ファイル名に順番に名前が付けられている場合、このawkソリューションは機能します。

ls | awk 'BEGIN { FIELDWIDTHS = "5 2" } $2 > 10'

説明

  • FIELDWIDTHS = "5 2"$1これは、最初の5文字と$2次の2文字を参照することを意味します。
  • $2 > 10フィールド2が10より大きい場合に一致し、デフォルトのコードブロックを暗黙的に呼び出します。'{ print }'
于 2012-07-27T19:50:54.680 に答える
0

たった1つのプロセス:

ls ?????+(1[1-9]|[2-9]?)_?_??.jpg
于 2012-07-27T19:54:04.270 に答える
0

より多くのスクリプトで

#!/bin/bash
for i in seq FIRST INCREMENT LAST
do
cp abcde$i_y_zz.jpg /your_new_dir //or whatever you want to do with those files
done

あなたの例では、seqの行は次のようになります

for i in seq 11 1 100000000
于 2012-07-27T19:35:43.133 に答える
0

これまでに提供されたすべてのソリューションは問題ありませんが、シェル プログラミングの経験がある人なら誰でも、構文解析lsは決して良い考えではなく、避ける必要があることを知っています。これは実際にはこの場合には当てはまりません。ファイルの名前が特定のパターンに従っていると想定できますが、これは覚えておくべき規則です。詳細はこちら

あなたが望むことは、GNUでより安全に達成できますfind-ファイルがあるディレクトリでコマンドを実行すると仮定すると、次のようになります。

find . -regextype posix-egrep -regex '\./[0-9]{5}[1-9][0-9]_[[:alpha:]]_[[:alpha:]]{2}.jpg$'
于 2012-07-27T21:30:53.580 に答える