正如标题所述,我如何更改 Ubuntu 目录中每个文件的扩展名?我见过一些使用重命名等的示例,但我收到错误(无法找到包重命名),并且无法通过 apt-get 访问。
另外,我实际上不知道原始文件的类型!它是从 Hadoop 文件系统复制到本地驱动器的数据,我需要它们全部采用 .txt 格式。
如果有什么不同的话,我在 Oracle Virtual Box 中运行 Ubuntu 12.04
编辑:输出:ls -l /usr/bin/改名/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
答案1
该rename
命令已经安装,您不需要添加任何其他内容。
rename
将 Perl 代码作为其第一个参数。重命名的大多数具体用例都包含正则表达式替换:s/REGEXP/REPLACEMENT/
。要删除现有扩展名,请从最后一个.
字符开始替换所有内容。
rename 's/\.[^.]*$/.txt/' /path/to/directory/*
如果您的文件没有扩展名(.
名称中没有),您可以使用$
(与文件名结尾匹配)作为正则表达式,或附加.txt
到名称中。
rename '$_ = "$_.txt"' /path/to/directory/*
这不会改变文件的内容,只会重命名文件。如果您的数据不是您想要的格式,那就是一个完全不相关的问题。
答案2
您可以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
替换txt
。
更精通 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 的默认行为是处理符号链接本身,而不是链接指向的文件)。
来源:
答案3
我认为你可以使用这个简单的 b
重命名_扩展_脚本.sh
#!/bin/bash
for file in *
do
mv -- "${file}" "${file%.*}.txt"
done
此脚本适用于有扩展或无扩展的情况。
答案4
我有这个脚本。我知道它不是伪验证,即在处理带有空格的文件时。这就是我一开始就运行 detox 的原因。
#!/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