web-dev-qa-db-ja.com

Ubuntu 12.04での複数ファイルの拡張子の変更

タイトルにあるように、Ubuntuのディレクトリ内のすべてのファイルの拡張子を変更するにはどうすればよいですか?いくつかの例ではrenameなどを使用していますが、エラー(パッケージ名の変更が見つかりません)が表示され、apt-getからアクセスできません。

さらに、実際には元のファイルの種類がわかりません!これは、Hadoopのファイルシステムからローカルドライブにコピーされたデータであり、すべてが.txt形式である必要があります。

違いがある場合は、Oracle Virtual BoxでUbuntu 12.04を実行しています

編集:ls -l/usr/bin /rename/ etc/alternatives/renameの出力

amartin24@ubuntu-amartin24:~/TwitterMining/JSONTweets$ ls -l /usr/bin/*rename* /etc/alternatives/rename
ls: cannot access /etc/alternatives/rename: No such file or directory
-rwxr-xr-x 1 root root 10392 Mar 30  2012 /usr/bin/rename.ul
3
Andrew Martin

問題のディレクトリにcdして、次のようなものを実行できます。

find -L . -type f -name "*.oldextension" -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%.oldextension}.newextension"
done

または、ファイルに拡張子がまったくない場合:

find -L . -type f -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%}.newextension"
done

あなたの場合、newextensiontxtに置き換える必要があります。

Bashを熟知している人は、これをよりうまく分解できるかもしれません。その場合は、お気軽に回答を編集してください。


元の説明:

1)名前を変更しますファイル拡張子のみ${FNAME%.so}.dylibを使用しているため)。 ${X/.so/.dylib}を使用する他のすべてのソリューションは、ファイル名に誤って名前を変更するため、間違っています最初の出現.so(たとえば、x.so.sox.dylib.soに名前が変更されます、またはさらに悪いことに、./libraries/libTemp.so-1.9.3/libTemp.so./libraries/libTemp.dylib-1.9.3/libTemp.soに名前が変更されます-エラー)。

2)ファイル名のスペースおよびその他の特殊文字を処理します(二重引用符を除く)。

3)ディレクトリやその他の特別なファイルは変更しません。

4)サブディレクトリへのシンボリックリンクとターゲットファイルへのリンクをたどり、リンク自体ではなくターゲットファイルの名前を変更します(findのデフォルトの動作は、リンクが指すファイルではなく、シンボリックリンク自体を処理することです)。

ソース:

Bash名前変更拡張再帰-stackoverflowaps2012 で応答。

4
Glutanimate

renameコマンドはすでにインストールされています。他に何かを追加する必要はありません。

renameは、最初の引数としてPerlコードを取ります。名前変更の具体的なユースケースのほとんどは、正規表現の置換s/REGEXP/REPLACEMENT/で構成されています。既存の拡張子を削除するには、最後の.文字で始まるすべてを置き換えます。

rename 's/\.[^.]*$/.txt/' /path/to/directory/*

ファイルに拡張子がない(名前に.がない)場合、正規表現として$(ファイル名の末尾に一致する)を使用するか、.txtを名前。

rename '$_ = "$_.txt"'  /path/to/directory/*

ファイルの内容は変更されず、名前が変更されるだけです。データが希望する形式になっていない場合、それはまったく無関係な問題です。

5
Gilles

このシンプルなbashスクリプトを使用できると思います

rename_ext_script.sh

#!/bin/bash
for file in *
do
  mv -- "${file}" "${file%.*}.txt"
done

このスクリプトは、拡張子の有無にかかわらず両方の場合に機能します

2
lexeek

GUIソリューション


概要

Ubuntu Software Centerには、ファイルのバッチの名前を変更するための本当に使いやすい強力なGUIツールpyRenamerがあります。

インストール

Sudo apt-get install pyrenamer

または

Foo
(ソース: buntu.com

スクリーンショット

enter image description here

1
Kat Amsterdam

拡張子のないファイルがたくさんある場合(./out_1./out_2out_3、...など):

cd YOUR_DIRECTORY_HERE
ls | xargs -i{} mv {} {}.YOUR_EXTENSION_HERE

ls | xargs -i{} mv {} {}.md
0
Jamie

このスクリプトがあります。私はそれがダミーの証明ではないことを知っています。つまり、スペースを含むファイルを処理しているときです。だから最初にデトックスを実行します。

#!/bin/bash
#   detox * 
# uncomment if you want to get rid of spaces and funny characters
    script=$(basename $0)
if  [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
    clear   
    echo "Script for adding an extension to files without extension"
    echo "---------------------------------------------------------"
    echo -e "\n Usage:"
    echo -e "   $script extension\n"
    echo -e "Exampli gratia: \n The command:"
    echo "      $script txt"
    echo -e "   will rename:\n      FileWithoutExtension -> FileWithoutExtension.txt\n"

else
for file in $(ls -p -I '*.*' | grep -v '/$') # excludes direcotires
    do 
    mv -iv "$file" "$file.$1"
    done
fi
0
xerostomus