2014-09-24 48 views
1

重命名多個文件,我想使用shell腳本 在一個目錄重命名多個文件的文件具有共同的前綴:如何在UNIX

Modify: 2014-09-19 16:08:35.000000000 +0300-16:08:35.000000000-OCS_dmobfw1-oam_d04_20140919_155335.csv 
Modify: 2014-09-19 16:09:23.000000000 +0300-16:09:23.000000000-OCS_dmobfw1-oam_d01_20140919_155423.csv 
Modify: 2014-09-19 16:09:51.000000000 +0300-16:09:51.000000000-OCS_dmobfw1-oam_d09_20140919_155451.csv 
Modify: 2014-09-19 16:12:40.000000000 +0300-16:12:40.000000000-OCS_dmobfw1-oam_d07_20140919_155740.csv 
Modify: 2014-09-19 16:14:48.000000000 +0300-16:14:48.000000000-OCS_dmobfw1-oam_d05_20140919_155948.csv 
Modify: 2014-09-19 16:18:14.000000000 +0300-16:18:14.000000000-OCS_dmobfw1-oam_d03_20140919_160314.csv 
Modify: 2014-09-19 16:18:15.000000000 +0300-16:18:15.000000000-OCS_dmobfw1-oam_d08_20140919_160315.csv 

我想從所有文件刪除以下部分:

修改:2014年9月19日16:08:35.000000000 + 0300-16:08:35.000000000-

這樣的輸出可以是這樣的:

OCS_dmobfw1-oam_d01_20140423_223805.csv OCS_dmobfw1-oam_d01_20140423_223905.csv

我嘗試:

for name in Modify* ; 
do 
mv "$name" $(echo $name | sed 's/Modify: 2014-09-19 16:18:14.000000000 +0300-16:18:14.000000000-/ /g') ; 
done 
+0

你沒有告訴我們你的方法有什麼問題,但由於你的文件名包含空格(不這樣做),你會遇到麻煩。使用'find'可能是最安全的選擇。 – 5gon12eder 2014-09-24 16:02:35

+0

可否請你告訴我更多關於如何在我的情況下使用find? – 2014-09-24 16:06:22

回答

0

例如:

for name in Modify* 
do 
    echo mv "$name" "$(sed -E 's/Modify: .{55}//'<<<"$name")" 
done 

ř EMOVE回聲如果滿意..

<<<是bash的擴展,如果你沒有使用bash

echo mv "$name" "$(echo "$name" | sed -E 's/Modify: .{55}//')" 

做,如果每一個文件包含OCS,你可以使用更短:

echo mv "$name" "$(grep -o 'OCS.*' <<<"$name")" 
+0

最後一次編輯工作正常,但前兩個不起作用。 – 2014-09-24 16:16:43

+0

@MohamedYasser在這種情況下,你的sed不知道'-E'。 _aren't working_沒有幫助,將很高興知道錯誤是什麼 - 糾正... – jm666 2014-09-24 16:46:21

0
for name in Modify* ; 
do 
    new=`echo $name | sed 's/Modify: 2014-09-19 16:18:14.000000000 +0300-16:18:14.000000000-//g'`; 
    mv $name $new; 
done 
0

您接受的答案可能更簡單,至少也一樣好,但這裏是您如何使用find來做到這一點。

find . -mindepth 1 -maxdepth 1 -name 'Modify*' -execdir sh -c 'mv -n "[email protected]" "$(echo "[email protected]" | sed "s,Modify: .\{55\},,")";' -- '{}' \; 

這種做法將是,如果你想遞歸子目錄最有用的。在這種情況下,請刪除-maxdepth 1選項。

您最初的嘗試的關鍵問題是您的文件名都有不同的時間戳,但您只替換了特定的時間戳。

+0

非常感謝您的幫助 – 2014-09-24 16:42:12