文字を置き換えて複数のファイル名を変更する


29

that : screenshot 13:25.png
おそらく ":"が原因で、Windowsのような名前のファイルが複数あり、これらのファイルを開くのに苦労しています。

どうすれば交換できますか?


2
質問に解決済みのマークを付けるために回答を受け入れることはできますか?これは他のユーザーを大いに助けます。
-MERose

回答:


52

ターミナルでcd、適切なディレクトリに移動して、これを実行します。

rename 's/\:/-/g' *.png -vn

これにより、名前の変更がプレビューされます。に置き換える必要が:あり-ます。

それが正しいようであればn、最後からを削除すると、実際の名前変更が行われます。

:17.04を超えるUbuntuバージョンはに付属していませrenameんが、デフォルトのリポジトリで引き続き利用できるため、使用sudo apt install renameして入手してください


あなたのanswer.Iが試したと私はこの問題を持っていてくれてありがとう:置換パターン終了していない時(evalの1)ライン1
user236152

@ user236152申し訳ありませんが、エスケープのバックスラッシュに少し腹を立てました(自動操縦で!)。カップルを削除し、現在有効になっているはずです。
オリ

他のプラットフォーム(選択したすべてのファイルで実行)で問題を引き起こす可能性のあるすべての文字を置き換える単純なNautilusスクリプトは、「マルチプラットフォーム」のユーザーに役立つ可能性があります。
サディ

2
使用する理由 それが何をしているのかを示します(間違えた場合に簡単に元に戻すことができます)。なぜ最後に?それだけでn簡単に削除できます(または)。
オリ

1
@nightcrawlerあなたは完全に別のチェーン交換することができる必要があります:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
オリ

10

これが純粋なbashソリューションです。

for i in *:*; do
    mv "$i" "${i//:/_}"
done

${var//pattern/replacement}フォーマットは、すべての出現置き換えますpatternとをreplacement変数に$var。bashの文字列操作機能の詳細については、こちらを参照してください

複数のキャラクターに対してこれを行いたい場合は、単にキャラクタークラスに配置することができます。したがって、たとえば、すべてを置き換えるために;:=+%,アンダースコアで、あなたが行うことができます:

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

基本的に、アイデアはそれを[ ]意味しany of the characters listedます。そのため、置換するすべての文字を文字クラスに配置することにより、すべての文字が一度に処理されます。


あなたが求めた特定の文字については、それらのいくつかをエスケープする必要があるため、物事はもう少し複雑です(/* nixはWindowsがそれを許可しないのでファイル名にそれを許可しないので、私は無視しています)問題):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

私はエスケープしていることに注意してください\'"追加することによって、\それぞれの目の前に。


これを強化して、いくつかの個々の文字(たとえば、Windowsで受け入れられないすべての文字)を他の文字に置き換えることができますか?
サディ

1
@Sadiは更新された回答を参照してください。
テルドン

基本的には9つあります: "<>:" / \ | ?* "
サディ

@Sadiは更新された回答を参照してください。
テルドン

おかげで、これは選択したファイルの名前をWindowsと互換性のあるNautilusスクリプトを作成するのに役立ちます。
サディ14年

2

GUIを使用する場合は、pyrenamerをインストールします。

sudo apt-get install pyrenamer

それを実行します:

pyrenamer

パターンや名前の変更形式に関する多数のオプションがあります。


1

私はGUIを好みますが、Nautilus拡張として、つまりNautilus Actions Extraとして

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.htmlを参照)

次に、名前を変更するファイルを選択し、コンテキストメニューから[名前の変更]をクリックすると、ファイルの名前を変更するための多くのオプションが提供されます。


0

このrenameutilsパッケージには、qmvインタラクティブなバッチ名の変更を提供する便利なプログラムがあります。ディレクトリまたはファイルのリストで実行すると、ファイル名を含む一時テキストファイルが生成され、お気に入りのエディターが起動します。エディターを終了すると、変更したファイル名はそれに応じて名前が変更されます。qmvバッチ名前変更の問題をテキスト編集の問題に変えます。

この場合、qmv -f do *:*コロンを含むすべてのファイルの名前を編集してから:%s/:/_/g、Vim のコマンド(または、使用するエディターでの対応する検索と置換)を編集できます。

この-f doオプションは、宛先ファイル名のみを持つようにテキストファイルの形式を設定します。これにより、検索と置換がより簡単になります。デフォルトの形式では、各行にファイル名のコピーが2つあり、2番目のファイルのみを編集します。これにより、ファイル内の行を削除または並べ替えた場合に正しいことを実行できますが、必ずしも最も簡単なわけではありません。他の形式もあります。

を使用するqmvsed、インタラクティブ機能が必要ない場合は、のような選択したコマンドを介して生成されたファイルをパイプすることを選択できます。


0

そして、これは、すべての選択されたファイル名で(すべての?)Windows互換性のない文字をハイフンに置き換えるNautilusスクリプトです(terdonの回答に基づいています;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done

0

Thunar(XFCEファイルマネージャー)には、ファイルの一括名前変更のための優れたビルドイン機能があります。文字の削除/置換、検索と置換、ファイルの番号付けなどのオプションがあります。

thunarをインストールします。

sudo apt-get install thunar

thunarを開き、ファイルを参照して選択し、「名前の変更」を選択します(コンテキストメニューまたはF2


0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit

これはうまく機能し、変数プロンプトがあります...ファイルに_ Truncate Last Characters.cmd
TekWiz2010

3
これは正しいかもしれませんが、Windowsバッチスクリプト言語を使用しています。Ubuntuに関する質問、およびUbuntu関連のツールのサイトであるAskUbuntuを利用しています。私の見解では、この答えは必ずしもここで適切であるとは限りません。
セルギーKolodyazhnyy

Wineで実行する必要がありますが、これをUbuntuで実行することはおそらく可能です...これは奇妙な答えです。
オリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.