ファイル名にテキストを一括付加する方法は?


44

.mdすべてのさまざまな名前のファイルでいっぱいのディレクトリがあるとしましょう。各ファイル名の前に「テキスト」を追加したいとしましょう。だから、例えば:ファイルa.mdb.md、とc.mdなるtest - a.mdtest - b.mdtest - c.md

コマンドラインでこれをどのように達成しますか?

回答:


60

ターミナルから簡単に直接入力できるワンライナー:

for f in *.md; do mv "$f" "test - $f"; done

または、セミコロンを使用する代わりに別の行に書き換えます:

for f in *.md
do
    mv "$f" "test - $f"
done

博覧会

for(in sh)の構文:

for NAME [in WORDS ... ] ; do COMMANDS; done

ここで、NAMEis fとour WORDSは、現在のディレクトリにあるすべてのファイルに一致し*.mdます。そのため、変数$fは、一致する各ファイルに置き換えられます*.md

だからa.md

mv "$f" "test - $f"

になる

mv "a.md" "test - a.md"

各ファイル名$fにスペースが含まれている可能性があるため、引用符は重要です。そうでmvない場合、各単語は個別のファイルであると考えられます。たとえば、引用符がなく、というファイルがあるFoo Bar.md場合、次のように変換されます。

mv Foo Bar.md test - Foo Bar.md

意図したとおりには機能しません。しかし$f、引用符で囲むことは理にかなっています:

mv "Foo Bar.md" "test - Foo Bar.md"

の構文に注意して、それぞれに明示的に名前を付けることforで、すべての*.mdファイルのサブセットの名前を変更することもできます。

for f in a.md b.md d.md; do mv "$f" "Test - $f"; done

または、シェル展開を使用します。

for f in {a,b,d}.md; do mv "$f" "Test - $f"; done

これはまさに私が見る必要があったものです。ありがとう!
ライアン

11

あなたが持っている場合prename...

prename 's/^/test - /' *.md

通常のシェルコマンドの使用:

for file in *.md; do
    mv "$file" "test - $file"
done

どうやって手に入れprenameますか?
Gaʀʀʏ

Ubuntu 16.04 LTSにプリインストールされているようです。パッケージマネージャー(つまり、sudo apt-get install)を試しましたか?
Orion751

5

mmv12は、現在のジョブに適用され、それは次のようになり、また、Aのタスクのために非常に便利なツールであります

mmv '*.md' 'test - #1.md'

もちろん、a1.mdではなくa.md、b.md、c.mdに「test-」だけを追加したい場合は、

mmv '?.md' 'test - #1.md'

より適切です。

特にあなたがそのような問題をたくさん抱えているなら、私は本当にそれを提案することができます。

さらにグラフィカルインターフェイスを探している場合は、gprenameを試してください


5

IFS変数を再定義しない限り、スペースで失敗するforループを使用する代わりに、whileループをfindと組み合わせて使用​​することをお勧めします。ファイルと同じディレクトリから実行すると、次のように動作します

find . -maxdepth 1 -type f -name '*.md' | while read -r file; do
    file=$(basename $file)
    mv "$file" "test - $file"
done

「basename」行があるので、findはファイル名のみを出力します-名前変更操作を中断させるパスコンポーネントなし。


2

私はそれが本当に遅いことを知っていますが、誰かがこのようなものを探しているなら、これは私のために働いた:

rename '' 'name -' *.md

1
シンプルで
わかりやすい

0

zsh使用可能な場合は、次を使用できますzmv

autoload zmv
zmv -w '*' 'test - $1'

以下を使用してコマンドをテストできます。

zmv -wn '*' 'test - $1'
  • -n ドライランを意味します。つまり、何が起こるかだけを示します。
  • -w 暗黙的にワイルドカードを括弧で囲み、後方参照を機能させます。

0

bashで、フォルダー内のすべてのファイルに「テキストの追加-」を追加します。

for i in *; do mv "$i" "$(echo $i | sed 's/^/Prepend\ text\ \-\ /')"; done;

これは非常に長い執筆方法ですfor i in *; do mv "$i$" "Prepend text - $i"; done
デビッドリチャービー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.