![](/img/trans.png)
[英]Linux How to List Files greater than particular timestamp in file name?
[英]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 > 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.