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

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

正如标题所述,我如何更改 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 的默认行为是处理符号链接本身,而不是链接指向的文件)。

来源:

Bash 重命名扩展递归 - stackoverflow,回答者aps2012

答案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

相关内容