我是Linux的新手(我正在使用Linux Mint),我需要你帮助理解基本的bash命令。
我将文件存储在我在不同操作系统中使用的外部硬盘驱动器(NTFS格式化)上。我的文件组织在许多目录(文件夹)和每个主目录内我有更多的文件夹,在这些文件夹中我有其他文件夹,依此类推。我需要一个bash命令来查找每个名称末尾带有尾随空格的所有目录。如果可能的话,我还想使用bash命令删除空格。我试过寻找其他答案,但我只找到了命令,没有明确解释他们做了什么,所以我不确定这是否是我正在寻找的,我不想冒险改变一些事情。任何帮助解释使用哪些命令都将非常感谢!
答案 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
另见:
while read
循环的一般语法,以及上述特定修订(IFS=
,read -r
等)的目的。${var%suffix}
语法,称为“参数扩展”,用于从上面的值中修剪后缀)。find
的使用及其与bash集成的一般性介绍。答案 1 :(得分:0)
find . -name "* " -type d
.
搜索当前目录和子目录。
-name
搜索匹配的文件名(星号表示再匹配零个字符,文字空间匹配文件名末尾的空格)
-type d
搜索目录类型的项目。