如何在BASH中移动少于5个字节的所有文件?

Vil*_*age 7 bash filesize mv

我有一个包含许多音频文件的文件夹,但有些是~4个字节,似乎什么都没有,它们是0秒长,没有声音.我想将它们移动到名为"temp /"的文件夹中.

如何将文件夹中少于5个字节的所有文件移动到此文件夹?

Kyl*_*ley 20

找!

您可以使用find为您执行此操作:

find . -type f -maxdepth 1 -size -5c -exec mv {} temp/ \;
Run Code Online (Sandbox Code Playgroud)

说明

-size -5c抓取少于5个字节的所有文件.该-表示小于和c指示字节.

-maxdepth 1 当你试图递归到temp /(移动你的初始文件之后)时,会阻止你尝试在自己之上移动文件.

-exec mv {} temp/ \;只需mv在每个文件上运行以将它们放入temp({}代替文件的名称).转义的分号标志着exec的mv命令的结束.

还有其他尺寸可供选择:

`b'    for  512-byte blocks (this is the default if no suffix is
       used)
`c'    for bytes
`w'    for two-byte words
`k'    for Kilobytes (units of 1024 bytes)
`M'    for Megabytes (units of 1048576 bytes)
`G'    for Gigabytes (units of 1073741824 bytes)
Run Code Online (Sandbox Code Playgroud)


Mat*_*kel 2

find -size 1c将为您提供恰好是一个字节的所有文件。

正如@user1666959提到的,您还可以使用find . -type f -size -4c,它将查找当前目录(和子目录)中所有 4 字节及以下的文件。

$ find . -maxdepth 1 -type f -size -4c -exec mv {} temp/ \;
Run Code Online (Sandbox Code Playgroud)

(是的,您将需要尾随\;.

请注意,find -size允许其他精确的文件大小匹配(例如1k),但也允许您搜索占用磁盘上指定块数(不考虑单元)的文件。

$ man find
Run Code Online (Sandbox Code Playgroud)

提供了有关如何使用它进行搜索的更多信息。