2014-06-22 22 views
0

我有大量的文件(數十萬),都有相同的名稱格式。 文件名格式爲: [前綴] [編號]後綴] 其中所有文件的[前綴]和[後綴]相同,只是編號部分發生變化。數字部分是一樣的東西0004732 因此,文件名是: [前綴] 004732 [後綴] [前綴] 004733 [後綴] [前綴] 004734 [後綴] 等使用正則表達式指定一個範圍的文件

我需要移動範圍大約100,000個文件(連續數字)到另一個目錄,我想知道是否可以用正則表達式來做到這一點。

+0

如何通過正則表達式來移動文件? –

+0

Windows還是Linux? – Alisa

+0

'find'支持正則表達式。例如'找。 -type f -name「prefix1 [0-5] [0-9]後綴\ .txt」'用於文件100-159。 – beerbajay

回答

0

您正在尋找character classes。這是一個有點難以指定使用正則表達式,因爲它適用於文本,而不是數字號碼的範圍,但它可以做這樣的事情(對文件1-100):

prefix[0-1][0-9][0-9]suffix 
prefix[0-1]\d\dsuffix #this also works in PERL regex 

更復雜的數字變得棘手。對於0-211:

prefix([0-1][0-9][0-9]|20[0-9]|21[0-1])suffix 
+0

只需注意:您的正則表達式不會匹配0-99的數字。就像'([0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 20 [0-9] | 21 [01])'應該可以工作,儘管。縮短版本:'(\ d | [1-9] \ d | 1 \ d \ d | 20 \ d | 21 [01])'。 –

0

如果您在Windows上,請安裝Cygwin,然後執行以下操作。如果您使用Mac OS X或Linux,只需打開一個終端即可。您需要執行以下操作:

ls PREFIX* | sed 's/PREFIX\(0[0-9]\)SUFFIX/mv & tmp\/PREFIX\1SUFFIX/' | sh 

這是幹什麼的?

  1. 列出所有文件開始以指定的前綴
  2. 管道這份名單sed的,它使用正則表達式匹配只有在上述範圍內的文件指定
  3. 使用移動新建一個字符串命令
  4. 管道移動命令字符串在shell(SH),並執行它

可以調整正則表達式來匹配你的電話號碼範圍通過查看以下內容: http://www.regular-expressions.info/numericranges.html

0

據我所知,沒有正則表達式(處理複雜的情況下),但你可以很容易地使用循環:

下面的代碼在Linux上運行。我使用CygWin在Windows上運行了simnilar代碼,它也可以工作。也許在Windows中有類似的方法。

如果這兩個數字具有相同的數字;

示例:從

[前綴] 000[後綴]

[前綴] 000056789 [後綴]

for ((i=12345; i<56789; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done 

否則,您可以使用多個(通常是兩個或三個)命令;

示例:從

[前綴] 000[後綴]

[前綴] 003456789 [後綴]

for ((i=12345; i<99999; i++)); do mv "[prefix]0000$i[suffix]" /newDirectoryPath done 
for ((i=100000; i<999999; i++)); do mv "[prefix]000$i[suffix]" /newDirectoryPath done 
for ((i=1000000; i<3456789; i++)); do mv "[prefix]00$i[suffix]" /newDirectoryPath done