Bash:在每个名称的末尾查找带有尾随空格的目录

时间:2017-10-13 01:10:05

标签: bash

我是Linux的新手(我正在使用Linux Mint),我需要你帮助理解基本的bash命令。

我将文件存储在我在不同操作系统中使用的外部硬盘驱动器(NTFS格式化)上。我的文件组织在许多目录(文件夹)和每个主目录内我有更多的文件夹,在这些文件夹中我有其他文件夹,依此类推。我需要一个bash命令来查找每个名称末尾带有尾随空格的所有目录。如果可能的话,我还想使用bash命令删除空格。我试过寻找其他答案,但我只找到了命令,没有明确解释他们做了什么,所以我不确定这是否是我正在寻找的,我不想冒险改变一些事情。任何帮助解释使用哪些命令都将非常感谢!

2 个答案:

答案 0 :(得分:3)

以下内容为易于理解(作为次要目标),并在极端情况下(作为主要目标)更正:

# because "find"'s usage is dense, we're defining that command in an array, so each
# ...element of that array can have its usage described.
find_cmd=(
  find                 # run the tool 'find'
  .                    # searching from the current directory
  -depth               # depth-first traversal so we don't invalidate our own renames
  -type d              # including only directories in results
  -name '*[[:space:]]' # and filtering *those* for ones that end in spaces
  -print0              # ...delimiting output with NUL characters
)

shopt -s extglob                            # turn on extended glob syntax
while IFS= read -r -d '' source_name; do    # read NUL-separated values to source_name
  dest_name=${source_name%%+([[:space:]])}  # trim trailing whitespace from name
  mv -- "$source_name" "$dest_name"         # rename source_name to dest_name
done < <("${find_cmd[@]}")                  # w/ input from the find command defined above

另见:

  • BashFAQ #1,描述了while read循环的一般语法,以及上述特定修订(IFS=read -r等)的目的。
  • BashFAQ #100,描述了如何在bash中进行字符串操作(特别包括${var%suffix}语法,称为“参数扩展”,用于从上面的值中修剪后缀)。
  • Using Find,提供find的使用及其与bash集成的一般性介绍。

答案 1 :(得分:0)

find . -name "* " -type d

.搜索当前目录和子目录。

-name搜索匹配的文件名(星号表示再匹配零个字符,文字空间匹配文件名末尾的空格)

-type d搜索目录类型的项目。