我試圖將一些文件重命名爲另一分機:如何在bash中使用通配符重命名文件?
# mv *.sqlite3_done *.sqlite3
,但得到了一個錯誤:
mv: target '*.sqlite3' is not a directory
爲什麼?
我試圖將一些文件重命名爲另一分機:如何在bash中使用通配符重命名文件?
# mv *.sqlite3_done *.sqlite3
,但得到了一個錯誤:
mv: target '*.sqlite3' is not a directory
爲什麼?
通配符擴展會導致傳遞給該命令的多個名稱。 shell認爲你正嘗試將多個文件移動到*.sqlite3
目錄。
你需要使用一個循環:
for nam in *sqlite3_done
do
newname=${nam%_done}
mv $nam $newname
done
的%_done
說,從字符串中刪除的_done
最後一次出現。
如果你的文件名中可能有空格,你會引用文件名。
mv
只能將多個文件移動到一個目錄中;它不能將每一個移動到不同的名稱。你可以在bash循環,而不是:
for x in *.sqlite3_done; do
mv "$x" "${x%_done}"
done
${x%_done}
從$x
結束刪除_done
。
最簡單的方式是利用找到
find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \;
我覺得這已經在這裏找到答案: https://stackoverflow.com/questions/26519301/bash-error-renaming-files-with-spaces-mv -target-is-not-a-directory是否爲你分類? – Grey