目標1:如果只有一層深度,將子文件夾「拇指」更改爲「拇指」。
示例輸入:
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs
解決方案:
find . -maxdepth 2 -type d | sed 'p;s/thumbs/thumb/' | xargs -n2 mv
輸出:
./foo1/thumb
./foo2/thumb
./foo2/thumb
說明:
使用find
給你所有的「大拇指」文件夾僅一個級深。輸出到sed
。 p
選項打印輸入行,其餘的sed
命令將「拇指」更改爲「拇指」。最後,管道到xargs
。 -n2
選項告訴xargs
從管道使用兩個參數並將它們傳遞給mv
命令。
問題:
這不會趕上更深的子文件夾。您不能簡單地在此處使用深度,因爲find
會打印來自頂部的輸出,並且因爲我們在mv
之前用sed
替換東西,所以mv
將導致更深的子文件夾發生錯誤。例如,./foo/thumbs/thumbs/將不起作用,因爲mv
將首先處理./foo/thumbs並使其成爲./foo/thumb,但隨後下一個輸出行將導致錯誤,因爲./foo /拇指/拇指/不再存在。
目標2:要更改所有子文件夾「拇指」到「拇指」不管有多深。
示例輸入:
./foo1/thumbs
./foo2/thumbs
./foo2/thumbs/thumbs
./foo2/thumbs
解決方案:
find . -type d | awk -F'/' '{print NF, $0}' | sort -k 1 -n -r | awk '{print $2}' | sed 'p;s/\(.*\)thumbs/\1thumb/' | xargs -n2 mv
輸出:
./foo1/thumb
./foo2/thumb
./foo2/thumb/thumb
./foo2/thumb
說明:
使用find
爲您提供所有「拇指」子文件夾。將輸出傳送到awk
以打印每個路徑中'/'的數目加上原始輸出。 sort
輸出數字,反過來(把最深的路徑放在最上面)的數目'/'。將排序後的列表管理到awk
以刪除每行的計數。輸出到sed
。 p
選項打印輸入行,其餘的sed
命令找到上一個發生「拇指」,並且只將其更改爲「拇指」。由於我們按照從最深到最淺的順序對排序列表進行處理,因此這將爲mv
提供正確的命令。最後,管道到xargs
。 -n2
選項告訴xargs
從管道使用兩個參數並將它們傳遞給mv
命令。
請將您的問題移至[su]。這是[off-topic](http://stackoverflow.com/help/on-topic)。 –
我不知道如何移動,我搜索了但我找不到信息。 –
在這裏刪除,重新發布。 –