2014-10-17 122 views
1

我試圖將我的目錄中的所有文件單獨移動到新目錄phonex,並在同一時間將它們重命名爲phonex.txt。 例如,awk系統語法拋出錯誤

1.txt, 2.txt, jim.txt

成爲:

phone1.txt in directory phone1 
phone2.txt in directory phone2 
phone3.txt in directory phone3. 

我是一個新手,awk的,但我已成功地創建目錄,但我不能得到正確的重命名。 我曾嘗試:

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone」i 」.txt -t phone"i)}' 

哪些錯誤,有很多:

mv: cannot stat `phone」i': No such file or directory 

和:

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone」i 」/phone"i」.txt」)}' 

錯誤:

awk: 1: unexpected character 0xe2 

xargs的:/斌/回聲:由信號13終止任何人都可以幫我完成它嗎? TIA!

+2

設置爲零x=0看起來像使用'」'而不是'「'的簡單情況。 – 2014-10-17 11:29:09

+1

在一般,特別是如果你是初學者,使用'system'是非常危險的,如果你把一個錯誤的語法正確的程序放在一起,'system'會很高興,例如,文件系統......(注意,我並不是暗示這是你的程序的情況,我正在討論一種可能性),我傾向於在stdout上打印命令並在應用程序之前檢查程序的輸出,並且只有當我非常有信心我的工作的正確性我(1)將輸出輸出到'| sh'或(2)用'system(...)'更改'print ...'。 – gboffi 2014-10-17 11:38:27

+0

現在,更具體的評論:您通過將'file1'放入'folder1','file2'放入'folder2'中來複制**信息。有時冗餘是好的工程,有時是浪費。 – gboffi 2014-10-17 11:43:12

回答

1

如果你想要增加數字。
Else Tom Fenech的方式是走的路!

for i in *.txt;do d=phone$((++X));mkdir "$d"; mv "$i" "$d/$d.txt";done 

你也可能要爲x的情況下,在此之前它已經被設置爲別的

+0

評論清除:)我更喜歡@TomFenech之一,因爲它試圖複製只有目錄創建是好的(但這也可能有其他副作用) – Tensibai 2014-10-17 12:19:55

+0

感謝百萬! – schoon 2014-10-17 12:20:37

3

配管ls轉換爲xargs轉換成awk在這種情況下是完全不必要的。你所要做的可以用一個簡單的循環來完成:

for f in *.txt; do 
    i=$((i+1)) 
    dir="phone$i" 
    mkdir "$dir" && mv "$f" "$dir/$dir.txt" 
done 

根據您的外殼,$i增量可以以不同的方式來完成(如((++i))在bash),但這種方式是符合POSIX標準所以應該在任何現代的外殼上工作。

順便說一句,你原來的錯誤的原因是你使用的捲曲引號,這是shell不能理解的。您應該始終只在shell中使用單個的'和雙倍的"