使用带有条件的 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 实现
我有一个文件夹中的文件列表,其中一些文件的文件名中有空格。
我需要用 _ 替换空格,但首先,我需要列出条件为 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 实现