我有一大堆文件的名稱,比如這個如何交換文件名兩個部分組成
name-id.ext
,我希望交換的編號和名稱的文件中,以便它們被命名爲
id-name.ext
這似乎是工作,唯一的問題是,它也交換了文件擴展
for file in *; do echo "${file#*-}-${file%-*}"; done
我有一大堆文件的名稱,比如這個如何交換文件名兩個部分組成
name-id.ext
,我希望交換的編號和名稱的文件中,以便它們被命名爲
id-name.ext
這似乎是工作,唯一的問題是,它也交換了文件擴展
for file in *; do echo "${file#*-}-${file%-*}"; done
這可以實現使用的組合:
個正則表達式組來檢測所述文件名的兩個部分被交換: sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'
echo
到管: '^(.*)-(.*)\.ext'
sed
與第二部分交換的第一部分將舊文件名轉換爲sed:echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'
newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/')
mv
可以使用塊從以前的點作爲新的名稱:mv $file $newname
整個事情都可以被包裝在一個循環中走了過來文件:
for file in *ext; do newname=$(echo $file | sed 's/^\(.*\)-\(.*\)\.ext$/\2-\1\.ext/'); mv $file $newname; done;
這個工作完美!謝謝! –
我我一直在努力尋找各種各樣的東西,這是迄今爲止所提出的,我認爲應該工作,但不要這樣做,因爲它存在於*中;做回聲「$ {file% - *} - $ {file#* - }」;完成 –
請編輯您的答案以添加您的代碼,而不是添加評論。這樣你可以格式化它,並使其更易於閱讀。你也不會強迫人們試圖幫助你挖掘一堆評論,並拿起信息。 – Robert
你的'$ {file% - }'等看起來大致正確。在針對所有文件運行之前,是否讓它爲1個文件工作?您是否掃描了您的文件以確定它們的名稱中沒有空格或ctrl-chars,並且您可以合理地期望您的解決方案適用於所有文件?將來,請務必在您的Q **的主體中包含您嘗試過的代碼**,這樣人們就不必閱讀每一條不斷增長的評論鏈。祝你好運! – shellter