2015-12-15 58 views
0

我期待編寫一個腳本來從一個目錄移動文件:將文件移動到基​​於文件名不同目錄令牌

/家庭/ MYDIR/

要根據文件名令牌另一個目錄。我有一個命名爲這樣的一堆文件:

red_office_mike_2015_montreal_546968.ext

$ color_ $位置指定:$ $名_ $ YEAR_ $ city_ numbers.extension(文件將各種電影文件:MOV, MP4,MKV等)

我想腳本文件移動到以下位置:

/DIR /工作/ $顏色/ $名稱

然後驗證文件已成功複製,並在原始文件存在後刪除原始文件。

我也很喜歡它,如果腳本將創建目錄,如果它不存在。所以總而言之,我需要一個腳本來移動基於下劃線分隔的標記的文件,如果它尚不存在,創建到目錄,驗證成功的副本(也許與一個大小檢查),然後刪除原始文件。

我在linux上工作,而且更喜歡bash腳本。我給出的變量是通用的,我會將其他一些東西加入到腳本中,我只是尋求幫助構建骨架。

在此先感謝您的幫助!

+0

如果您正在尋找一種標記字符串的方法,請使用帶有自定義IFS的'read':'IFS ='_'。閱讀-r顏色位置名稱年份城市編號分機<<< red_office_mike_2015_montreal_546968.ext'。如果你要求爲你寫劇本,錯誤的地方兄弟。 – 4ae1e1

回答

0

這不是一個bash腳本,但Perl是在這種事情要好得多,並安裝所有Linux系統上

while(<>) { 
    chomp; 
    $file = $_; 
    ($colour, $location, $name, $year, $city, $numbers) = split(/_/,$file); 
    $dest0 = "/dir/work/$colour"; 
    $dest1 = "$dest0/$name"; 
    mkdir ($dest0) unless (-d $dest0); 
    mkdir ($dest1) unless (-d $dest1); 
    rename ($file, "$dest1/$file"); 
} 

腳本分裂的下劃線輸入文件,創建所有目錄然後將文件重命名爲新文件名。重命名負責所有複製和刪除。實際上它只是改變了目錄條目而沒有任何複製。

UPDATE

上述版本需要從含的文件名來處理的列表的文件的輸入。對於該處理在當前目錄中的所有文件的替代版本,替換

while(glob("*")) { 
+0

謝謝你,但它似乎並沒有工作。 我已經將腳本保存爲.pl文件,我用+ x標誌在其上運行了chmod以使其可執行,並將其存入包含文件的目錄中。 當我運行腳本時,它只是掛起,沒有錯誤消息,直到我強制退出它與CTRL + D。 任何想法?再次感謝你的幫助! – VanCityGuy

+0

將您的文件名保存到一個文件中,並使用該文件名作爲腳本的參數。 –

+0

更新'while'行後完美工作。謝謝! – VanCityGuy

0

while行我能在網上四處摸索,並拿出一個for循環做這個任務。我用cut,它使事情變得簡單。這裏是我工作:

#!/bin/sh 

cd "${1:-.}" 

for f in *.*; do 
    color=`echo "$f" | cut -d'_' -f1` 
    name=`echo "$f" | cut -d'_' -f3` 
    todir="/dir/work/$color/$name" 
    mkdir -p "$todir" 
    mv "$f" "$todir" 
done 

這完美地工作,我希望它可以幫助別人誰可能需要創建一個基於文件名的部分目錄。

shebang下的第一行使它能夠查看當前工作目錄或將其作爲參數傳遞給它的目錄。

感謝那些在原帖中插話的人。我是腳本編程新手,所以花了我一些時間來弄清楚這些東西。儘管我喜歡這個網站,但它非常有幫助!

相關問題