2016-08-12 141 views
0

我跑出來的選擇在這裏..bash腳本 - 重命名目錄包含*空間*()*所有文件 -

我看了一下各個崗位這裏這個話題,但出於某種原因答案不適合我。

我想要一個簡單的腳本來重命名給定文件夾中的所有文件爲任何東西!說一個計數器nr。即:

1.JPG

2.pdf

3.exe

我需要爲我的腳本的一部分,我不能移動的文件,因爲這些特殊字符:

我正在使用cygwin上一個win7機器

test01.jpg 
test01 (2).jpg 
test01 (2) - Copy.jpg 

這是我需要的腳本它的工作的一部分:

pathF="d:/scripts/img/_sandbox/depFrom" 
searchAll=$(find $pathF -type f | egrep ".*") 
ct=0 
for fAll in $searchAll; do 
    # echo -e $fAll 
    # echo -e "$ct" 
    old=$fAll 
    # new=$(sed "s/\ //g" $fAll) 
    mv -v $old $ct #$new 
    ((ct++)) 
done 

在這個例子中,我只是想處理,該文件是從WIN7即創建空格,但我需要處理() - 和空格來覆蓋所有。

這是我的控制檯輸出: output 出於某種原因,它似乎停止/在空間分割之間和後延。

任何幫助,非常感謝。

============================================== ====================

編輯: 我已經試過這樣:

pathF="d:/scripts/img/_sandbox/depFrom" 
searchAll=$(find $pathF -type f -printf "%f\n") 
for fAll in $searchAll; do 
    echo -e $fAll 
done 

和輸出是這樣的:

test01 
(2) 
- 
Copy.jpg 

該文件夾中只有一個文件!

$ ls depFrom/ 
test01 (2) - Copy.jpg 

$ find depFrom/ -type f -printf "%f\n" 
test01 (2) - Copy.jpg 
+1

'x = 0; for i in * .jpg; do mv「$ i」$((++ x))。jpg; done'? – 123

+0

我有相同的結果,這隻會增加文件的名稱。這個問題似乎是在閱讀文件.. –

+0

有這麼多的競爭條件,你甚至沒有考慮過,這使得一個可靠的解決方案几乎不可能。但是,爲什麼你不要求[短文件名](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#short_vs._long_names)呢?它保證不包含任何空格。 – IInspectable

回答

1

這應該工作,只要文件名稱不包含換行。

pathF="d:/scripts/img/_sandbox/depFrom" 
counter=0 
find "$pathF" -type f | while read f; do 
    mv "$f" "$((++counter))${f/*\./.}" #increment counter, preserve extension 
done 

如果你並不需要一個遞歸搜索pathF的,那麼解決方案呈現在你原來的問題下123的評論應該爲你工作,如果你添加擴展名從我的回答保持代碼:

x=0;for i in *;do mv "$i" "$((++x))${i/*\./.}";done 
+0

這似乎工作,我認爲這個位:$ {f /*\./。}。謝謝! –

1

該問題已在輸出中查找。任何空間都被它後面的命令視爲分離。使用文件名時,應使用選項

-print0 
      True; print the full file name on the standard output, followed by a null character 
      (instead of the newline character that -print uses). This allows file names that 
      contain newlines or other types of white space to be correctly interpreted by pro‐ 
      grams that process the find output. This option corresponds to the -0 option of 
      xargs. 

此外,你應該使用正確的撇號是 會包含空格

mv -v "$old" "$ct" 
+0

我已經試過你的建議,沒有運氣..見編輯 –

相關問題