Nic*_*rin 11 command-line find
我正在尝试学习 UNIX 命令,我正在玩这个游戏来学习,我现在真的被困住了。我通过 ssh 在服务器中,目录中充满了随机文件和文件夹,下一级的密码在其中一个文件中。我被告知该文件具有以下属性:
我猜我应该使用该find
命令,我尝试过,find ! -executable
但返回了大量文件。我可以在手册或在线中找到的唯一人类可读的帮助是以人类可读的方式打印文件大小。所以我在那里有点迷失?
我也确实尝试过,find ~ -size 1033b
但没有任何回报。但是当我尝试时,find ~ -size -1033b
它返回了目录中的每个文件。
roz*_*acz 19
要过滤掉人类可读的文件名,您可以使用[:print:]
(可打印)字符类名称。您将在grep
.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
Run Code Online (Sandbox Code Playgroud)
再想一想,“人类可读”的要求可能是指文件的内容,而不是其名称。换句话说,您将搜索文本文件。这有点棘手。正如@D_Bye 在评论中所建议的那样,您应该使用该file
命令来确定文件内容类型。但是file
在管道之后运行不是一个好主意,因为它会使显示文件名的任务复杂化。这是我的建议:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
Run Code Online (Sandbox Code Playgroud)
这是file
-part 的简要工作方式:
-exec
谓词执行sh -c 'file -b $0 | grep -q text' FILENAME
为每个FILENAME
满足所有上述条件(类型,大小,不可执行)。sh
) 运行这个简短的脚本: file -b $0 | grep -q text
,替换$0
为文件名。file
程序确定每个文件的内容类型并输出此信息。该-b
选项可防止打印每个测试文件的名称。grep
过滤来自file
程序的输出,搜索包含"text" 的行。(亲自查看file
命令的典型输出是什么样的。)grep
不输出过滤后的文本,因为它-q
给出了(quiet) 选项。它所做的只是将其退出状态更改为0
(表示“真”——找到过滤的文本)或 1(表示“错误”——文本“文本”没有出现在 的输出中file
)。grep
由sh
to进一步传递find
并作为整个“ -exec sh -c 'file $0 | grep -q text' {} \;
”测试的最终结果。-print
则执行命令(即打印测试文件的名称)。小智 8
find . -type f -readable -size 1033c ! -executable
Run Code Online (Sandbox Code Playgroud)
请注意,我使用了c
代替b
文件大小。 b
用于 512 字节块。 c
用于实际字节。