0

スペースを含むファイルを削除しようとしていますが、うまくいきません。

hw1:84$ ls
hw yoyo ~  misc.ml  test.ml
hw1:85$ rm hw yoyo ~
rm: cannot remove `hw': No such file or directory
rm: cannot remove `yoyo': No such file or directory
rm: cannot remove `/home/linux/ieng6/cs130w/cs130wau': Is a directory
4

4 に答える 4

8

ファイルが存在hw yoyo ~する場合は、それを引用する必要があります。それ以外の場合、rmは 3 つの個別の (存在しないか、さらに悪いことに存在する)ファイルを削除しようとします。

rm "hw yoyo ~"

ファイル名にスペースを入れるのは一般的には良い考えではありません~。ある時点でホームディレクトリを削除することになります。

ファイルが現在のディレクトリに存在hwyoyoないため、次のエラー メッセージが表示されます。

rm: cannot remove `hw': No such file or directory
rm: cannot remove `yoyo': No such file or directory

ファイル~も現在のディレクトリには存在しませんが、~ホーム ディレクトリのエイリアスであるため、これに対して別のエラー メッセージが表示されます。

rm: cannot remove `/home/linux/ieng6/cs130w/cs130wau': Is a directory

デフォルトrmでは、オプションなしでディレクトリを削除しないのは幸運です。-r

于 2013-01-18T22:47:55.063 に答える
3

ファイル名にスペースなどの特殊文字が含まれている場合は、名前を引用符で囲む必要があります。この問題に対処する別の方法は、名前の特殊文字をエスケープすることです。

したがって、 quote メソッドを使用して、次のことを行う必要があります。

rm 'hw yoyo ~'

エスケープメソッドを使用して、次のことを行います。

rm hw\ yoyo\ ~
于 2013-01-18T22:54:15.383 に答える
2

ファイル名を引用するか、特殊文字をエスケープするように指示する答えは正しいです。

さらに、シェルがそれをサポートしている場合は、ファイル名補完を使用できます(ファイル名が特殊文字で始まらない限り)。例えば:

$ ls
hw yoyo ~
$ rm h<Tab>

、、、rm hと入力Tabすると、シェルは、使用可能なファイル名を指定して、それを最長の一意のプレフィックスに展開します。これが現在のディレクトリで名前が。で始まる唯一のファイルである場合は、h名前全体に展開され、正しくエスケープされます。打った後Tab、私は見る:

rm hw\ yoyo\ ~

押すだけEnterでファイルを削除できます。

または、名前を引用することから始めることができます:

$ rm 'h<Tab>

に展開:

$ rm 'hw yoyo ~'

必要に応じて、引用符とエスケープを組み合わせることもできます。

$ touch 'foo$bar'
$ rm "f<Tab>

に展開:

$ rm "foo\$bar"

シェルが引用ルールを覚えている場合は、自分で覚えているよりも速くて簡単です。すでに知っている場合でも同様です。

上記はbashに適用されます。他の最新のシェルでも機能する可能性があります。

于 2013-01-18T23:05:38.763 に答える
0
rm "hw yoyo ~"

or 

rm hw\ yoyo\ ~

特別な場合には、一重引用符を使用してください。

例えば

kent$  l
total 0
-rw-r--r-- 1 kent kent 0 Jan 18 23:54 a b $HOME

kent$  rm "a b $HOME"
rm: cannot remove ‘a b /home/kent’: No such file or directory

kent$  rm 'a b $HOME'

kent$  l
total 0
于 2013-01-18T22:49:31.813 に答える