デスクトップに「Images」というフォルダーがあり、そのフォルダー内に3つの画像があります...
File-A-B.gif
File-C-D.gif
File-E-F.gif
...コマンド ラインでファイルの名前を変更して、2 番目のハイフン/ダッシュを削除したい。したがって、結果は次のような名前のファイルになります...
File-AB.gif
File-CD.gif
File-EF.gif
...相互にパイプされたコマンドの組み合わせを使用していますが、それらを機能させるのにあまり運がありません。
最初は持っていたls File-* | sed 's/\(File-[^-]\)-\(.+\)/mv & \1\2/' | sh
このコマンドの内訳は...
- で始まるファイルをすべてリストします
File-
- 結果をパイプして
sed
sed
名前のさまざまな部分をキャプチャするために使用します- キャプチャする最初のファイル
File-A
とB.gif
- 次に、一致し
sed
たファイル名を移動コマンドに置き換え、元のファイルの名前を、キャプチャした 2 つのデータで構成されるファイルに変更するように効果的に指示します。 - 次に、そのコマンドをパイプして
sh
私が得ていた最初のエラーは、権限エラーでした。ファイルへの「読み取りおよび書き込み」アクセス権があったため、その理由はわかりません。
これを回避するにchmod 777
は、各ファイルを削除します。
これにより、新しいエラーが発生しましたcannot execute binary file
。
このエラーを回避するために、次の投稿を見ました: http://blog.mpdaugherty.com/2010/05/27/difference-with-sed-in-place-editing-on-mac-os-x-vs-linux/これは、一重引用符のペアを追加することを提案しています。これが機能する理由は (どうやら) sed
、使用するファイル拡張子がわからないためエラーになりますが、空の文字列を配置するとそのエラーが中和されるためです (補足: 私の理解では、-i
フラグも使用する必要があるということでした。私は使用していませんが、それを行うと別のエラーが発生したため、それを破棄し、単一引用符を使用してバイナリファイルエラーを回避しました)。
だから今私は持っていますls File-* | sed '' 's/\(File-[^-]\)-\(.+\)/mv & \1\2/' | sh
しかし、これはNo such file or directory
?
ファイルの場所を明示しようとしたので、たとえば...
ls File-* | sed '' 's/\(File-[^-]\)-\(.+\)/mv ~\/Desktop\/Images\/& ~/Desktop\/Images\/\1\2/' | sh
...スラッシュをエスケープする必要がありました~\/Desktop\/Images\/
が、それでもうまくいきませんでした。
Homebrewを使用してGNUバージョンもインストールしsed
ましたが、同様の方法でエラーが発生しましたgsed: can't read s/\(Vim-[^-]\)-\(.+\)/mv & \1\2/: No such file or directory
どうすればこれを機能させることができるのか、少し途方に暮れています。
bash/zsh スクリプトや Ruby スクリプトを作成する必要はありません。
あなたが私に与えることができるどんな助けでも大歓迎です.