Aar*_*ols 5 command-line bash scripts
我在其中一个脚本的末尾使用以下代码来计算我已处理并移动到该目录中的文件数。
# Report on Current Status
echo -n "Cropped Files: "
ls "${Destination}" | wc -l
Run Code Online (Sandbox Code Playgroud)
我的问题在于我如何处理重复文件。截至目前,我首先检查文件是否存在(因为我的脚本对我正在处理的源文件具有破坏性)。如果它检测到该名称的文件已被处理,我会按如下方式更改文件名。
重复文件:foo.pdf
更改名称:foo.x.pdf
如果有 foo.x.pdf,那么我再次重命名为 foo.xx.pdf。根据需要重复。我打算稍后再去评估每个“版本”,然后选择最好的一个来保存。但我的问题就在这里。我想计算不包含 .x 的文件数。.xx。等等。如何将这些从ls
输出中剔除,以便wc -l
仅计算唯一文件?
TL;DR:如何获取给定目录中文件名中不包含给定子字符串的文件数?
要查找目录中不包含 的文件数.x.pdf
,请尝试:
find "${Destination}" -mindepth 1 ! -name '*.x.pdf' -printf '1' | wc -c
Run Code Online (Sandbox Code Playgroud)
要查找目录中不包含句点 - 一个或多个x
- 句点 - 的文件数pdf
,请尝试:
find "${Destination}" -mindepth 1 ! -regex '.*\.x+\.pdf' -printf '1' | wc -c
Run Code Online (Sandbox Code Playgroud)
以上通过子目录递归搜索。如果您不希望那样,请添加 option -maxdepth 1
。例如:
find "${Destination}" -mindepth 1 -maxdepth 1 ! -regex '.*\.x+\.pdf' -printf '1' | wc -c
Run Code Online (Sandbox Code Playgroud)
请注意,因为我们使用-printf '1'
,即使目录包含名称包含换行符的文件,此方法也是安全的。