The Bic Pen Asked: 2022-01-15 21:44:26 +0800 CST2022-01-15 21:44:26 +0800 CST 2022-01-15 21:44:26 +0800 CST ls 在目录中查找具有特定名称的文件,但 find 没有 772 我正在尝试查找名称以 . 开头的目录中的所有文件80s。 ls 80s*/*找到正确的文件,但find . -ipath '80s*/*'什么也不返回。此任务的正确find命令是什么? 我需要使用find,因为我想将所有此类文件移动到不同的文件夹并且不想解析ls. find ls 2 个回答 Voted Best Answer Stephan 2022-01-15T22:14:21+08:002022-01-15T22:14:21+08:00 -ipath匹配完整的路径名,包括当前路径.。因此,您必须将其包含在您的模式中: find . -ipath './80s*/*' 以上也会输出目录。要仅列出常规文件,请使用: find . -ipath './80s*' -type f (或! -type d除目录外的任何类型的文件) they 2022-01-15T22:39:27+08:002022-01-15T22:39:27+08:00 如果,如您所说,80s*/*匹配正确的文件,那么我真的没有理由使用find。 要将所有匹配的名称移动80s*/*到某个目标目录destdir,您可以使用 mv -n 80s*/* destdir/ 这会将所有非隐藏名称从任何匹配的目录移动80s*到单个目录destdir中。非标准-n选项通常意味着“没有破坏”,即如果存在名称冲突,不要覆盖文件。 如果使用 GNU ,您还可以使用选项(例如)或如上所述的( )mv来避免覆盖与其他文件同名的文件。--backup--backup=numbered-n--no-clobber 如果您只需要选择常规文件,或者如果80s*/*扩展的名称列表太长,请使用循环: for name in 80s*/*; do [ ! -f "$name" ] && continue mv -n "$name" destdir/ done (这也会将符号链接移动到常规文件。为了避免这些,另外测试-h/-L是否"$name"是符号链接。) 在zshshell 中,您可以使用移动所有与您的模式匹配的常规文件 mv -n 80s*/*(.) destdir/ ...其中 glob 限定符(.)将前面模式的结果过滤为仅包含常规文件((-.)还包括指向常规文件的符号链接)。 如果你真的需要使用find,那么考虑 find ./80s*/ -path './80s*/*' -prune ! -name '.*' -type f \ -exec mv -n {} destdir/ \; 这匹配您感兴趣的名称,并避免隐藏名称(您说80s*/*匹配正确,我认为这意味着不需要隐藏名称)。它修剪所有匹配的名称,这意味着它避免输入与模式匹配的子目录,然后,如果名称对应于常规文件,则将文件移动到destdir使用mv -n之前。 使用 GNU mv,您可以通过使用-exec mv -n -t destdir/ {} +代替原来的-exec. 这将mv使用成批找到的文件名执行,而不是mv为每个名称调用一次。
-ipath
匹配完整的路径名,包括当前路径.
。因此,您必须将其包含在您的模式中:以上也会输出目录。要仅列出常规文件,请使用:
(或
! -type d
除目录外的任何类型的文件)如果,如您所说,
80s*/*
匹配正确的文件,那么我真的没有理由使用find
。要将所有匹配的名称移动
80s*/*
到某个目标目录destdir
,您可以使用这会将所有非隐藏名称从任何匹配的目录移动
80s*
到单个目录destdir
中。非标准-n
选项通常意味着“没有破坏”,即如果存在名称冲突,不要覆盖文件。如果使用 GNU ,您还可以使用选项(例如)或如上所述的( )
mv
来避免覆盖与其他文件同名的文件。--backup
--backup=numbered
-n
--no-clobber
如果您只需要选择常规文件,或者如果
80s*/*
扩展的名称列表太长,请使用循环:(这也会将符号链接移动到常规文件。为了避免这些,另外测试
-h
/-L
是否"$name"
是符号链接。)在
zsh
shell 中,您可以使用移动所有与您的模式匹配的常规文件...其中 glob 限定符
(.)
将前面模式的结果过滤为仅包含常规文件((-.)
还包括指向常规文件的符号链接)。如果你真的需要使用
find
,那么考虑这匹配您感兴趣的名称,并避免隐藏名称(您说
80s*/*
匹配正确,我认为这意味着不需要隐藏名称)。它修剪所有匹配的名称,这意味着它避免输入与模式匹配的子目录,然后,如果名称对应于常规文件,则将文件移动到destdir
使用mv -n
之前。使用 GNU
mv
,您可以通过使用-exec mv -n -t destdir/ {} +
代替原来的-exec
. 这将mv
使用成批找到的文件名执行,而不是mv
为每个名称调用一次。