使用 mv
在文件名中添加換行符
這是一個嚴肅的問題。我測試了一些
awk
腳本,我需要名稱中帶有換行符的文件。是否可以在文件名中添加換行符
mv
?我現在,我可以這樣做
touch
:touch "foo bar"
通過觸摸,我在每次複製和粘貼時都添加了換行符。但是我不能
foo``Return``bar
在我的shell中寫。如何重命名文件以在文件名中有換行符?
編輯 2015/06/28;下午 7 點 08 分
zsh
要在我可以使用的中添加換行符,Alt
+Return
這是一個壞主意(文件名中有奇怪的字元),但你可以這樣做
mv somefile.txt "foo bar"
(你也可以做
mv somefile.txt "$(printf "foo\nbar")"
或mv somefile.txt foo$'\n'bar
,等等……細節是特定於你的外殼的。我正在使用zsh
)閱讀有關globbing的更多資訊,例如glob(7)。細節可能是特定於外殼的。但是請理解
/bin/mv
(由您的 shell)通過execve(2)給出一個擴展的參數數組:參數擴展和萬用字元是呼叫 shell 的責任。你甚至可以編寫一個很小的 C 程序來做同樣的事情:
#include <stdio.h> #include <stdlib.h> int main() { if (rename ("somefile.txt", "foo\nbar")) { perror("rename somefile.txt"); exit(EXIT_FAILURE); }; return 0; }
將上面的程序保存在
foo.c
,編譯gcc -Wall foo.c -o foo
然後執行./foo
同樣,您可以在 Perl、Ruby、Python、Ocaml 等中編寫類似的腳本……
但這是個壞主意。避免文件名中的換行符(這會使使用者感到困惑,並且可能會破壞許多腳本)。
實際上,我什至建議在文件路徑中僅使用非重音字母、數字和
+-/._%
字元(作為目錄分隔符)。/
應謹慎使用“隱藏”文件(以 開頭.
)並謹慎使用。我相信在文件名中使用任何類型的空格都是錯誤的。改用下劃線(例如foo/bar_bee1.txt
)或減號(例如foo/bar-bee1.txt
)