如何删除文件夹名称末尾的空格?

如何删除文件夹名称末尾的空格?

我想删除文件夹名称末尾的空格。

我有一个名为“Project1”的文件夹,其中有另一个名为“Exercise1”的文件夹。

我想用一个脚本来删除末尾的空格,并且只删除末尾的空格。
我不知道我的表达是否正确。

预先感谢您,祝您度过一个愉快的夜晚。

我输入了命令/bin/ls -l | od -c

root@debian:~$ /bin/ls -l | od -c
0000000   t   o   t   a   l       3   2  \n   d   r   w   x   r   -   x
0000020   r   -   x       2       k   a   b   i   a       k   a   b   i
0000040   a       4   0   9   6       j   u   i   l   .       2   0    
0000060   1   0   :   2   6       B   u   r   e   a   u  \n   d   r   w
0000100   x   r   -   x   r   -   x       7       k   a   b   i   a    
0000120   k   a   b   i   a       4   0   9   6       j   u   i   l   .
0000140       2   2       1   7   :   4   6       D   o   c   u   m   e
0000160   n   t   s  \n   d   r   w   x   r   -   x   r   -   x       2
0000200       k   a   b   i   a       k   a   b   i   a       4   0   9
0000220   6       j   u   i   l   .       2   2       1   9   :   2   6
0000240       I   m   a   g   e   s  \n   d   r   w   x   r   -   x   r
0000260   -   x       2       k   a   b   i   a       k   a   b   i   a
0000300       4   0   9   6       j   u   i   l   .       2   0       1
0000320   0   :   2   6       M   o   d 303 250   l   e   s  \n   d   r
0000340   w   x   r   -   x   r   -   x       2       k   a   b   i   a
0000360       k   a   b   i   a       4   0   9   6       j   u   i   l
0000400   .       2   0       1   0   :   2   6       M   u   s   i   q
0000420   u   e  \n   d   r   w   x   r   -   x   r   -   x       2    
0000440   k   a   b   i   a       k   a   b   i   a       4   0   9   6
0000460       j   u   i   l   .       2   0       1   0   :   2   6    
0000500   P   u   b   l   i   c  \n   d   r   w   x   r   -   x   r   -
0000520   x       2       k   a   b   i   a       k   a   b   i   a    
0000540   4   0   9   6       j   u   i   l   .       2   0       1   0
0000560   :   2   6       T 303 251   l 303 251   c   h   a   r   g   e
0000600   m   e   n   t   s  \n   d   r   w   x   r   -   x   r   -   x
0000620       2       k   a   b   i   a       k   a   b   i   a       4
0000640   0   9   6       j   u   i   l   .       2   0       1   0   :
0000660   2   6       V   i   d 303 251   o   s  \n
0000673

答案1

zsh

autoload zmv # best in ~/.zshrc
zmv -n '**/*[[:space:]]' '${f%%[[:space:]]#}'

(高兴时移除-n以进行空运行)

将从每个非隐藏文件或目录的末尾删除尾随空白字符。(#q/)如果您只想限制为目录,请添加到模式参数。或者(#qD)也处理隐藏文件。

POSIXly,你可以做一些接近的事情:

LC_ALL=C find . -depth -name '*[[:space:]]' -exec sh -x -c '
  for f do
    : mv -i "$f" "${f%"${f##*[![:space:]]}"}"
  done' sh {} +

-x(当高兴时删除:)。

该字符仅限于 ASCII 空白字符。

答案2

您可以使用 Bash 脚本来执行此操作。

只需创建一个脚本并将此代码复制到其中,将其放在“错误命名目录”所在的顶级目录中,然后执行:

#!/bin/bash
    
# find all directory names that end with space:
while find "$(pwd)" -type d |grep  -q ' $'
do
    # select one and store its name in DIR variable
    DIR=$(find "$(pwd)" -type d | grep ' $'|head -1)
    
    # remove the last character (which is space) from that 
    # name and save it to NEW_DIR variable
    NEW_DIR=${DIR%?}
    
    # rename the directory
    mv "$DIR" "$NEW_DIR"
done

正如您在此屏幕截图中所看到的,“”中存在具有类似条件的目录测试2”目录下,名为“space.sh”的脚本也位于“测试2”。执行脚本后,目录已根据我们的需要重命名:

在此输入图像描述

答案3

pathlib模块在蟒蛇3 拥有遍历层次结构、检测所述文件并重命名它们的所有必要手段。

python3 -c 'import pathlib
for p in iter(pathlib.Path(".").rglob("*[ \t]")):
  p.rename("/".join([str(p.parent),p.name.rstrip()]))'

根据文件层次结构中存在的文件名类型,我们使用以下 python 代码来递归遍历树深度优先是默认操作。它查找任何非 ASCII 名称并通过替换非 ASCII 字符来重命名。带有“X”。重命名之前不会检查新名称是否已存在。

python3 - <<\eof
import pathlib, re
for p in iter(pathlib.Path('.').rglob('*[! -~]*')):
  foo = p.name
  for m in re.finditer(r"[^ -~]",p.name):
    foo = foo[:m.start()] + "X" + foo[m.end():]
  p.rename("/".join([str(p.parent),foo]))
eof

答案4

使用珀尔的rename

我没有写这个,但我经常使用它。将视频文件从 Windows 机器传输到我的 Linux 机器会在目录名称末尾添加额外的空格,此命令会删除它们,无论是文件夹和文件名末尾的单个空格还是多个空格。

删除当前目录中目录/文件名末尾的空格

进行试运行

rename -n 's/ *$//' ./* 

实际运行

rename 's/ *$//' ./*

相关内容