old*_*oxx 8 bash files directory rename
我想出了一个巧妙的方法来摆脱重复的文件。您知道,名称中包含“(1).”、“(2).”、“(3).”等的那些。在终端窗口的命令行中,您输入“rm "[反斜杠]") ",但不带引号。这样就可以了。[反斜杠]“\”表示下一个字符被接受为一个字符,而不是一对括号的一部分。当没有其他方法时,这会起作用。顺便说一句,我试图在“rm”命令中键入“\”,但它无法正确显示,因此我将术语 [反斜杠] 放在那里。
文件夹或文件名中出现“\”也表明存在空格。在名称中使用空格并不常见,除非您使用 Windows。Windows 只是让您用双引号将“整个路径\文件名”括起来。您也可以在 Ubuntu 中执行此操作,或者在空格前添加反斜杠“\”。但是如果你想用不同的字符替换空格呢?像连字符或下划线?您将如何一次对所有文件夹和文件执行此操作?
或者,如果您决定只删除空格,将其余的字符打包在一起呢?你会怎么做?
这是一个棘手的问题:摆脱或任何前导或尾随空格。即使有不止一个在场。
总结一下,如何检测和删除完全空的文件。或者是空的文件夹。
hee*_*ayl 19
要从文件名中删除任意数量的前导空格,您可以使用rename
( prename
) :
rename -n 's/^ *//' *
Run Code Online (Sandbox Code Playgroud)要从文件名中删除任意数量的尾随空格,您可以使用rename
( prename
) :
rename -n 's/ *$//' *
Run Code Online (Sandbox Code Playgroud)
-n
如果您对文件名感到满意,请删除(试运行)。
删除空文件或文件夹(递归):
find . -empty
Run Code Online (Sandbox Code Playgroud)
使满意 ?让行动发生:
find . -empty -delete
Run Code Online (Sandbox Code Playgroud)
仅在当前目录中:
find . -maxdepth 1 -empty -delete
Run Code Online (Sandbox Code Playgroud)
还可以使用-type f
只有文件,-type d
如果你想只目录。
阅读man rename
并man find
获得更多想法。
我经常忘记rename
。以下是使用普通 bash 执行此操作的方法:
$ touch " leading spaces" "trailing spaces "
$ printf ">%s<\n" *spaces*
> leading spaces<
>trailing spaces <
$ shopt -s extglob
$ for f in *spaces*; do
new=${f##*([[:blank:]])} # remove leading whitespace
new=${new%%*([[:blank:]])} # remove trailing whitespace
mv "$f" "$new"
done
$ printf ">%s<\n" *spaces*
>leading spaces<
>trailing spaces<
Run Code Online (Sandbox Code Playgroud)