在Ubuntu 12.04中更改多个文件的扩展名

正如标题所说,如何更改Ubuntu中目录中每个文件的扩展名? 我已经看到一些例子使用重命名等等但我得到一个错误(无法找到包重命名)并且它无法通过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 

您可以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 

在您的情况下,您将不得不用newextension替换newextension

对bash更熟练的人可能能够更好地打破这种局面。 在这种情况下,请随时编辑我的答案。


原始描述:

1)它将重命名文件扩展名 (由于使用${FNAME%.so}.dylib )。 使用${X/.so/.dylib}所有其他解决方案都是错误的,因为它们错误地重命名了文件名中第一次出现.so (例如, x.so.so被重命名为x.dylib.so ,或者更糟, ./libraries/libTemp.so-1.9.3/libTemp.so被重命名为./libraries/libTemp.dylib-1.9.3/libTemp.so – 错误)。

2)它将处理文件名中的空格和任何其他特殊字符(双引号除外)。

3)它不会更改目录或其他特殊文件。

4)它将遵循符号链接到子目录和目标文件的链接并重命名目标文件,而不是链接本身(find的默认行为是处理符号链接本身,而不是链接指向的文件)。

资源:

Bash重命名扩展递归 – stackoverflow ,由aps2012回答。

已经安装了rename命令,您无需添加任何其他内容。

rename将Perl代码作为其第一个参数。 重命名的大多数具体用例包括正则表达式替换: s/REGEXP/REPLACEMENT/ 。 要删除现有扩展,请从最后一个开始替换所有内容. 字符。

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

如果您的文件没有扩展名(名称中没有. ),您可以使用$ (与文件名末尾匹配)作为正则表达式,或者将.txt附加到名称中。

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

这不会更改文件的内容,只会重命名它们。 如果您的数据不是您想要的格式,那么这是一个完全不相关的问题。

我想你可以使用这个简单的bash脚本

rename_ext_script.sh

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

此脚本适用于具有扩展或不扩展的两种情况

GUI解决方案


概观

在Ubuntu软件中心有一个非常容易使用且function强大的GUI工具来重命名批量文件pyRenamer。

安装

 sudo apt-get install pyrenamer 

要么

富

截图

在此处输入图像描述

我有这个脚本。 我知道它不是虚拟certificate,即在处理带空格的文件时。 这就是为什么我在开始时进行排毒。

 #!/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 

如果您有一堆没有扩展名的文件(例如out_3 , …):

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

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