我希望打印所有不“仅包含数字”的文件名:
到目前为止,这是我的代码:
find . -type f | awk '!/[[:digit:]]/ {print}'
这会找到每个不包含任何数字的文件。
我的问题还在于,它也会检查目录名称。
最新代码:
find . -type f | awk '/.*\W.*/ {print}'
我认为它有效,但它也检查目录名称,我只关心文件
答案 0 :(得分:4)
如果我理解正确的话:
打印所有不包含"仅包含数字的文件名":
find . -type f -printf '%f\n'| awk '/[^[:digit:]]/ {print}'
没有包含目录。
如果您希望所有不包含数字或字母的文件名":
find . -type f -printf '%f\n'| awk '/[^[:alnum:]]/ {print}'
但我相信包含点.
和空格是明智之举
通常在文件名中使用的字符:
find . -type f -printf '%f\n'| awk '/[^[:alnum:]. ]/ {print}'
(已取消)Shorthand Character Class \W
还将包含_
下划线,并且不太便于移植(是GNU扩展)。
我不知道你是否要包括那个。
答案 1 :(得分:3)
更简单的解决方案是
find . -type f -regextype sed -not -regex '^[./[:digit:]]\+$'
此处-not -regex
相当于sed。{/ p>中的!p
如果您正在处理非标准文件名,请执行以下操作:
find . -type f -regextype sed \
-not -regex '^[./[:digit:]]\+$' \
-print0 | while read -r -d '' line
do
echo "$line"
done
示例输出
./binaryzebra8
./foo
./bingo bar
./bar
./file
./romeo
juliet --> non-standard file name
./888/bingo88
./\hash --> non-standard file name
@ BinaryZebra的答案中提到的-printf "%f\n"
为您提供了[ manpage ]所说的文件的基本名称:
%f删除了任何前导目录的文件名(仅限最后一个 元素)。
但实际上,如果您确实正在处理find的结果,则需要完整的文件路径。
答案 2 :(得分:0)
仅仅依靠find
?
find . -type f -name '*[^0-9]*'
答案 3 :(得分:0)
另一种可能性,就是我不会使用awk
,因为就简单的grep -v
find . -type f | grep -v '^[0-9]*$'