检测并删除文件或文件夹名称中的前导空格

问题描述 投票:0回答:4

我需要检测并删除文件夹中的许多前导空格。

我尝试一些代码,如:

find /home/account -depth -name " *" -exec sh -c 'f="{}"; mv -v "$f" "...."' \;

但是我找不到任何代码来删除文件名或文件夹中的前导空格。

我需要:

mv "/home/account/folder/ folder 1"  "/home/account/folder/folder 1"

(因为我使用查找,并使其检测子文件夹的前导空格)

我如何用上面提到的代码删除那些前导空格?任何建议都会有所帮助。顺便说一句,我正在使用centos 7。

linux bash removing-whitespace
4个回答
0
投票

尝试一下:

find /home/account -depth -name "* " | sed "s/\/ /\//g"


0
投票

您可以使用bash替换来提取文件名,并消除前导空格。

小注:模式-name "* "查找带有尾随空格的文件。如果您要寻找用于前导空格的过滤器,请使用-name " *"-name "* * "以外的任何空格。示例代码使用前导空格模式。您可以根据需要调整样式和sed。

find /home/account -depth -name " *" | while read fn ; do
   d=${fn%/*}
   b=$(echo ${fn##*/} | sed -e 's/^ *//')
   mv "$fn" "$d/$b"
done


0
投票

使用重命名

-名称“ *”:匹配名称中带有尾随空格的文件名

重命名's / // gi':用空格替换或不带空格

查找。 -depth -name“ *” |重命名's / // gi'


0
投票

-name "* "匹配名称中具有trailing空格的文件名。我在下面对此进行了修复,并使用-execdir使其更易于使用参数扩展来删除前导空间。

find /home/account -depth -name ' *' -execdir sh -c '
for f; do
    mv -v "$f" "${f#./[[:space:]]}"
done' _ {} +

对于空运行,在mv之前加echo

© www.soinside.com 2019 - 2024. All rights reserved.