これは深刻な質問です。いくつかのawk
スクリプトをテストしていますが、名前に改行を含むファイルが必要です。
を使用してファイル名に改行を追加できますかmv
?
私は今これを行うことができますtouch
:
touch "foo
bar"
タッチ方式でコピーして貼り付けるたびに改行を追加しました。しかし、foo
Returnbar
シェルには書き込めません。
ファイル名に改行文字を含めるようにファイル名を変更するにはどうすればよいですか?
2015年6月28日午後7時8分に修正されました。
Iに改行を追加するには+をzsh
使用できます。AltReturn
ベストアンサー1
これは悪い考えですが(ファイル名に奇妙な文字が含まれています)、これを行うことができます。
mv somefile.txt "foo
bar"
mv somefile.txt "$(printf "foo\nbar")"
(完了したり待つことができますmv somefile.txt foo$'\n'bar
...詳細はシェルによって異なります。私は1つを使用していますzsh
)
詳しくはこちらワイルドカード、例えばグローバル(7)。詳細はシェルによって異なります。しかし、これは/bin/mv
(シェルで)以下を介して提供されることを理解してください。実行(2)、一つ拡大するパラメータ配列:パラメータ拡張とワイルドカードは呼び出しシェルによって担当されます。
同じことを行うために小さな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
)を使用してください。