网站搜索

在 Linux 中将所有文件和目录名称重命名为小写


在上一篇文章中,我们描述了如何计算给定目录内的文件和子目录的数量。本指南将向您展示如何在 Linux 中将所有文件和目录名称重命名为小写。

另请阅读:如何找出 Linux 中的顶级目录和文件(磁盘空间)

有多种方法可以实现这一目标,但我们将解释两种最有效和最可靠的方法。出于本指南的目的,我们使用了名为 Files 的目录,其结构如下:

find Files -depth

1. 一起使用 find、xargs 和 rename 命令

rename 是一个简单的命令行实用程序,用于在 Linux 中一次重命名多个文件。您可以将它与 find 实用程序一起使用,将特定目录中的所有文件或子目录重命名为小写,如下所示:

find Files -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

上述命令中使用的选项的说明。

  • -depth – 在目录本身之前列出每个目录的内容。
  • -n 1 – 指示 xargs 在每个命令行中最多使用一个来自 find 输出的参数。

Files 目录中的文件和子目录重命名为小写后的示例输出。

另一种替代方法是在脚本中使用 find 和 mv 命令,如下所述。

2. 在Shell脚本中使用find和mv命令

首先创建您的脚本(您可以将其命名为您喜欢的任何名称):

cd ~/bin
vi rename-files.sh

然后在其中添加下面的代码。

#!/bin/bash
#print usage 
if [ -z $1 ];then
        echo "Usage :$(basename $0) parent-directory"
        exit 1
fi

#process all subdirectories and files in parent directory
all="$(find $1 -depth)"



for name in ${all}; do
        #set new name in lower case for files and directories
        new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')"

        #check if new name already exists
        if [ "${name}" != "${new_name}" ]; then
                [ ! -e "${new_name}" ] && mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!"
        fi
done

echo
echo
#list directories and file new names in lowercase
echo "Directories and files with new names in lowercase letters"
find $(echo $1 | tr 'A-Z' 'a-z') -depth

exit 0

保存并关闭文件,然后使脚本可执行并运行它:

chmod +x rename-files.sh
rename-files.sh Files     #Specify Directory Name

您可能还想阅读以下相关文章。

  1. Linux 中“一切皆文件”和文件类型的解释
  2. fswatch – 监视 Linux 中的文件和目录更改或修改
  3. Fasd – 提供快速访问文件和目录的命令行工具
  4. FSlint – 如何在 Linux 中查找并删除重复文件

在本指南中,我们向您介绍了如何在 Linux 中将所有文件和目录重命名为小写。如果出现任何错误,请通过下面的反馈表联系我们。您也可以向我们提供任何其他方法来执行相同的操作。