名前がハイフンで始まるファイルの名前を変更することはできません


37

名前の先頭にハイフンが付いたファイルの名前を変更しようとしていますが、次の両方があります。

mv -example-file-name example-file-name

この:

mv '-example-file-name' example-file-name

結果:

mv: invalid option -- 'e'

1
ファイルの相対パス(./tmp/-example)、フルパス(/ home / a / tmp / -example)を使用するか、-でオプションを指定したことをmvに伝え、その後にファイルが続くことを伝えます名前。
ЯрославРахматуллин

誰かが不思議に思った場合:mv *example-file-name example-file-nameファイル名の展開(グロブ)がmv呼び出される前に起こるため、同じ問題があります。
ウォルタートロス

回答:


53

ほとんどのGNU / Linuxコマンドでは、--オプションでオプションの終わりを示すことができるため、後続の-接頭語がオプションとして扱われません。

  mv -- -example-file-name example-file-name

小さなテスト

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$

これによりrename、についても同じ問題が解決します。(少なくとも、次のようrename [options] <expression> <replacement> <file>...に機能するバージョン、どちらでも
underscore_d

くそー、BSD / Mac OS Xにmvはこれがありません:(
Sridhar Sarnobat

18

RedGrittyBrickの答えはとても良いです。別のオプションは次のとおりです。

mv ./-example-file-name example-file-name

小さなテスト:

$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example

非常に良い回避策、これは私には決して起こりませんでした。そして、受け入れ答えとは違って、これはBSD / Mac OS Xで動作します
シュリダールSarnobat

それは少しよりキャッチーです--
コーニ

-1

これを使用できます:

rename -- "s/\-//g" *

あなたのファイル名の場合、すべてのファイルの名前を変更できます:)

-ng--sh-ay-01[------------]-FLV

コードを実行すると、ファイル名は次のようになります。

ngshay01[]FLV

1
他のアプローチ(RedGrittyBrick、およびgniourf_gniourfによるアプローチ)は、他のいくつかのコマンドで動作する可能性が高くなります。
TOOGAM

-1

このトリックは、絶望的な時に私のために働きます。YMMV

rename \- '' *

名前を変更するには、ハイフンをエスケープする必要があります。名前変更が単一引用符を尊重しない、または何らかの種類のオーバーライドを提供しない理由は、私を超えています。

これは、名前変更を使用して先頭のハイフンを確実に処理する唯一の方法です。私はmvの使用に関する他の投稿に同意しますが、何らかの理由でmvを使用できない場合、これは機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.