Shell

使用 mv 在文件名中添加換行符

  • June 29, 2015

這是一個嚴肅的問題。我測試了一些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

引用自:https://unix.stackexchange.com/questions/212688