次のファイルがあるとします:
english_api
english_overview
style.css
私は手に入れたい:
english_api.html
english_overview.html
style.css
つまり、ターミナルを使用してディレクトリ内にドットを含まないすべてのファイル(.
)にテキストを追加する方法。
明らかに、そのフォルダーには多くのファイルがあります。例として3を書きました。
そのフォルダー内で.css
を.html
に置き換える場合、次のように使用します。
rename .css .html *.css
しかし、何かを含まないファイルを一致させる方法を本当に考えることはできません。また、rename
コマンドを使用して追加する(vs replace)方法は?
このfind
コマンドを試してください。
find . -type f ! -name "*.*" -exec mv {} {}.html \;
現在のディレクトリにあるファイル名にドットを含まないファイルの名前をこのfilename.html
format(added .html
最後に)に変更します。
.
->現在のディレクトリを表します
-type f
->ファイルに対してのみこの操作を実行します。
! -name "*.*"
->名前にドットを含まないファイルの名前を出力します。
-exec mv {} {}.html
-> find
コマンドは、抽出されたファイル名に対してこのmove(or)rename操作を実行します。
\;
-> find
コマンドの終わりを表します。
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
オプションを削除します)。
このような場合に好まれるのはmmv
です。 Ubuntuにはデフォルトではインストールされませんが、Sudo apt-get install mmv
コマンドを使用してインストールできます。
あなたの場合、2回使用する必要があります:
各ファイル名の最後に.html
を追加して、現在のディレクトリのすべてのファイルの名前を変更します。
mmv -v '*' '#1.html'
以前に名前に1つ以上の.
(ドット)が含まれていたすべてのファイルの名前を再度変更(戻る)します。
mmv -v '*.*.html' '#1.#2'
または、1行で:
mmv -v '*' '#1.html' && mmv -v '*.*.html' '#1.#2'
-v
オプションは必須ではありません。 mmv
はアクションをサイレントに実行するため、冗長出力にのみ使用します。
詳細については、 man mmv
を参照してください。
Perl名前変更コマンド( prename
)を使用すると、ファイル名にドットを含める必要があるという条件を追加できます。 Perlスニペットがファイルの名前を変更しない場合、そのファイルは変更されません。これを記述するいくつかの方法を次に示します。
prename '/\./ or s/$/.html/' *
prename 's/$/.html/ unless /\./' *
prename '$_ .= ".html" unless /\./' *
prename '$_ = "$_.html" unless /\./' *
prename 'if (!/\./) {$_ = "$_.html"}' *