2016-11-04 24 views
-3

我有一個目錄「FolderName」,每天有10,000個新文件。幾乎這些文件中的一半的命名如下:有沒有一種有效的方法來替換空格_文件名? (數千個文件)

filename_yyyy-mm-dd_hh:mm 

而另一半被命名爲:

filename_yyyy-mm-dd hh:mm 

(與空間,而不是下劃線)

的劇本,我想設置應執行以下操作:

只重命名名稱中包含空格的文件,跳過不需要處理的文件。

我無法找到使腳本高效的方法,我需要真的跳過好的一半,我的腳本試圖mv任何文件,它是相當長和低效率。任何更好的設計的好主意?

謝謝大家

+0

你能告訴我們你的腳本,因爲它看起來的權利嗎? – larsks

+0

如果你有重命名工具,它會很容易。這個網站上有很多答案。 – karakfa

+0

如果您將所有文件重命名爲'yyyy-mm-dd_hh:mm_filename'形式,您可以輕鬆地對舊文件進行排序和移動。或者使用'-k'進行排序並與截止日期進行比較 – dawg

回答

0

for f in "$(find . -name '* *')"; do mv $f $(echo $f | sed 's/\ /_/'); done將做到這一點。使用find的-exec選項也應該有更好的方法。

編輯: 如果函數放在一個腳本,然後找到可以直接使用:

cat <<EOF > space_to_underscore 
#!/usr/bin/env bash 
mv "$1" "$(sed 's/\ /_/' <(echo "$1"))" 
EOF 
chmod +x space_to_underscore 

find . -name '* *' -exec ./space_to_underscore {} \; 

這將是比使用for循環更快。

+0

謹慎解釋downvote? – bschlueter

0

重命名只包含在其名稱中有空格的文件,而忽略那些不需要處理文件:

for file in *\ * ; do mv "$file" "${file// /_}" ; done 

移動所有文件早於一個星期了「NewFolderName」文件夾:

find -mtime 7 -exec mv {} NewFolderName/ \; 
2

查看rename實用程序,這是一個專爲此設計的Perl腳本,它功能強大而且速度很快。

rename -n ' ' _ *\ * 

或者:

find /path/to/dir -type f -name '* *' -exec rename -n ' ' _ {} \; 

-n標誌是預演,打印什麼工作,而無需實際重新命名任何事情發生。如果輸出看起來不錯,請移除標誌並重新運行。

1

與傳統rename你可以很容易地轉換單一的空間來強調

$ rename ' ' '_' files 
相關問題