使用带有条件的 ls 列出文件和 process/grep 仅包含空格的文件

List file using ls with a condition and process/grep files that only whitespaces

我有一个文件夹中的文件列表,其中一些文件的文件名中有空格。 我需要用 _ 替换空格,但首先,我需要列出条件为 ls *_[1-4]*[A-c]* 的文件。过滤文件后,部分文件有空白且位置不固定(前、中、末位置)。 我如何替换 ls 命令后的空格?

我会使用 find 列出文件并将结果通过管道传送到 sed:

find -maxdepth 1 -type f -name '*_[1-4]*[A-c]*' | sed 's/ /_/g'

don't want to process the output from ls。只需循环匹配的文件。

for file in *_[1-4]*[A-c]*; do
    # Skip files which do not contain any whitespace
    case $file in *\ *) ;; *) continue;; esac
    echo mv -n "$file" "${file// /_}"
done

echo 是一种保障;如果输出看起来正确,请将其取出。

case 和替换查找 space (ASCII 32);如果您还想匹配制表符、表单提要等,请相应地进行调整。 bash 允许 $[\t ] 之类的东西匹配制表符或 space,但这不能移植到其他 Bourne shell 实现