簡體   English   中英

Linux:如何獲取名稱以大於10的數字結尾的文件

[英]Linux: How to get files with a name that ends with a number greater than 10

我有一些文件名如下:'abcdefg_y_zz.jpg''abcdefg'是一個數字序列,而'y'和'zz'是字母。 我需要獲得所有數字序列以大於10的數字結尾的文件。“fg”大於10的文件。

有沒有人知道如何在bash腳本中執行此操作?

好的,從技術上講,基於你的所有信息......

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

這個怎么樣? 只要排除位置f為0的那些。

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

更新因為你想要> 10而不是> = 10,你也需要排除10。 這樣做:

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

更多腳本

#!/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

如果文件名按順序命名,則此awk解決方案有效:

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

說明

  • FIELDWIDTHS = "5 2"表示$1將引用前5個字符, $2表示接下來的2個字符。
  • 當字段2大於$2 > 10時, $2 > 10匹配並隱式調用默認代碼塊,即'{ print }'

只需一個過程:

ls ?????+(1[1-9]|[2-9]?)_?_??.jpg

到目前為止提供的所有解決方案都很好,但任何有shell編程經驗的人都知道解析ls永遠不是一個好主意,必須避免 這實際上不適用於這種情況,我們可以假設文件的名稱遵循某種模式,但這是一個應該被記住的規則。 這里有更多解釋。

使用GNU find可以實現您想要的更安全 - 假設您在文件所在的目錄中運行命令,它看起來像這樣:

find . -regextype posix-egrep -regex '\./[0-9]{5}[1-9][0-9]_[[:alpha:]]_[[:alpha:]]{2}.jpg$'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM