在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