web-dev-qa-db-ja.com

ドットを含まないファイル名にテキストを追加します

次のファイルがあるとします:

english_api
english_overview
style.css

私は手に入れたい:

english_api.html
english_overview.html
style.css

つまり、ターミナルを使用してディレクトリ内にドットを含まないすべてのファイル(.)にテキストを追加する方法。

明らかに、そのフォルダーには多くのファイルがあります。例として3を書きました。

そのフォルダー内で.css.htmlに置き換える場合、次のように使用します。

rename .css .html *.css

しかし、何かを含まないファイルを一致させる方法を本当に考えることはできません。また、renameコマンドを使用して追加する(vs replace)方法は?

9
Bor691

このfindコマンドを試してください。

find . -type f ! -name "*.*" -exec mv {} {}.html \;

現在のディレクトリにあるファイル名にドットを含まないファイルの名前をこのfilename.htmlformat(added .html最後に)に変更します。

.->現在のディレクトリを表します

-type f->ファイルに対してのみこの操作を実行します。

! -name "*.*"->名前にドットを含まないファイルの名前を出力します。

-exec mv {} {}.html-> findコマンドは、抽出されたファイル名に対してこのmove(or)rename操作を実行します。

\;-> findコマンドの終わりを表します。

13
Avinash Raj

Bashでは、 extended Shell globs を使用できます。

for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done

(正しいパターンと一致することを確認したら、echoを削除します)。拡張グロビングがまだ有効になっていない場合は、shopt -s extglobで有効にできます。

別のオプションは、リテラル.を除外する正規表現でPerlベースのrename関数を使用することです

rename -nv 's/^[^.]+$/$&.html/' path/to/files/*

(正しいパターンに一致することを確認したら、nオプションを削除します)。

6
steeldriver

このような場合に好まれるのはmmvです。 Ubuntuにはデフォルトではインストールされませんが、Sudo apt-get install mmvコマンドを使用してインストールできます。

あなたの場合、2回使用する必要があります:

  1. 各ファイル名の最後に.htmlを追加して、現在のディレクトリのすべてのファイルの名前を変更します。

    mmv -v '*' '#1.html'
    
  2. 以前に名前に1つ以上の.(ドット)が含まれていたすべてのファイルの名前を再度変更(戻る)します。

    mmv -v '*.*.html' '#1.#2'
    

または、1行で:

mmv -v '*' '#1.html' && mmv -v '*.*.html' '#1.#2'

-vオプションは必須ではありません。 mmvはアクションをサイレントに実行するため、冗長出力にのみ使用します。

詳細については、 man mmv を参照してください。

2
Radu Rădeanu

Perl名前変更コマンド( prename )を使用すると、ファイル名にドットを含める必要があるという条件を追加できます。 Perlスニペットがファイルの名前を変更しない場合、そのファイルは変更されません。これを記述するいくつかの方法を次に示します。

prename '/\./ or s/$/.html/' *
prename 's/$/.html/ unless /\./' *
prename '$_ .= ".html" unless /\./' *
prename '$_ = "$_.html" unless /\./' *
prename 'if (!/\./) {$_ = "$_.html"}' *
1
Gilles