递归删除目录中的尾随空格
Recursive removal of trailing whitespace in directory
结构
/some/dir/a b c d /somedir2/somedir4
/some/dir/abcderf/somedir123/somedir22
问题
需要递归删除目录中的尾随空格,在示例中“a b c d
”末尾有一个空格,而“somedir22
”末尾可能有一个需要删除的空格。
有数百个目录,想要递归地迭代每个目录以检查目录是否有尾随空格,如果有,则重命名没有空格的目录。 Bash 是我目前唯一的选择,因为这是 运行 在 Western Digital NAS 上。
我认为最糟糕的部分是,每次您 mv
一个目录时,该目录中的目录都会更改路径。
所以我们需要find
在目录本身之前处理每个子目录。感谢@thatotherguy 提供需要传递给 find
的 -depth
选项。使用一些花哨的 -exec
sh 脚本,我们可以 find
所有以尾随 space 结尾的目录,并在目录本身之前处理每个目录的 conetnt。对于每个目录,运行 一个 shell 脚本,它删除尾随的 spaces 和 mv
s 目录:
find . -type d -regex '.* ' -depth \
-exec sh -c 'mv -v "" "$(echo "" | sed "s/ *$//")"' -- {} \;
@edit 我把之前的回答留作参考:
find . -type d -regex '.* ' -printf '%d\t%p\n' |
sort -r -n -k1 | cut -f2- |
xargs -d '\n' -n1 sh -c 'mv -v "" "$(echo "" | sed "s/ *$//")"' --
前两行根据路径的深度对路径进行倒序排序。因此 "./a /b "
在 "./a "
重命名为 "./a"
之前重命名为 "./a /b "
。最后一个命令使用 sed
从路径中删除尾随 space,然后调用 mv
。在 tutorialspoint.
上进行了测试
我认为我们可以使用 perl 的重命名实用程序使 xargs
行更简单(但它必须是 perls,而不是来自 util-linux 的那个):
.... |
xargs -d '\n' rename 's/ *$//'
好吧,我们可以 rename ' ' ''
使用 util-linux 重命名,但这会删除所有 space,我们只需要尾随的。
结构
/some/dir/a b c d /somedir2/somedir4
/some/dir/abcderf/somedir123/somedir22
问题
需要递归删除目录中的尾随空格,在示例中“a b c d
”末尾有一个空格,而“somedir22
”末尾可能有一个需要删除的空格。
有数百个目录,想要递归地迭代每个目录以检查目录是否有尾随空格,如果有,则重命名没有空格的目录。 Bash 是我目前唯一的选择,因为这是 运行 在 Western Digital NAS 上。
我认为最糟糕的部分是,每次您 mv
一个目录时,该目录中的目录都会更改路径。
所以我们需要find
在目录本身之前处理每个子目录。感谢@thatotherguy 提供需要传递给 find
的 -depth
选项。使用一些花哨的 -exec
sh 脚本,我们可以 find
所有以尾随 space 结尾的目录,并在目录本身之前处理每个目录的 conetnt。对于每个目录,运行 一个 shell 脚本,它删除尾随的 spaces 和 mv
s 目录:
find . -type d -regex '.* ' -depth \
-exec sh -c 'mv -v "" "$(echo "" | sed "s/ *$//")"' -- {} \;
@edit 我把之前的回答留作参考:
find . -type d -regex '.* ' -printf '%d\t%p\n' |
sort -r -n -k1 | cut -f2- |
xargs -d '\n' -n1 sh -c 'mv -v "" "$(echo "" | sed "s/ *$//")"' --
前两行根据路径的深度对路径进行倒序排序。因此 "./a /b "
在 "./a "
重命名为 "./a"
之前重命名为 "./a /b "
。最后一个命令使用 sed
从路径中删除尾随 space,然后调用 mv
。在 tutorialspoint.
我认为我们可以使用 perl 的重命名实用程序使 xargs
行更简单(但它必须是 perls,而不是来自 util-linux 的那个):
.... |
xargs -d '\n' rename 's/ *$//'
好吧,我们可以 rename ' ' ''
使用 util-linux 重命名,但这会删除所有 space,我们只需要尾随的。