[操作系统]Linux与Windows环境下列出目录文件名的脚本实现与原理详解
本文系统介绍在Linux和Windows操作系统下通过命令行脚本获取当前目录所有文件名并输出至文本文件的多种方法涵盖基础命令、参数解析、脚本封装及底层原理。一、Linux环境下的实现方案1.1 基础命令ls重定向直接在终端执行以下命令lsfilename_list.txt功能将当前目录下所有文件和文件夹的名称不含路径写入filename_list.txt。底层原理ls命令调用readdir()系统函数读取目录项获取目录下所有条目名称。是Shell重定向操作符将标准输出stdout重定向到指定文件。若文件不存在则创建存在则覆盖。默认不包含隐藏文件以.开头如需包含可使用ls -a。1.2 进阶命令find获取完整路径若需输出文件的绝对路径如/home/user/test/file.txt使用find$(pwd)-maxdepth1-typeffilename_fullpath.txt参数解析$(pwd)命令替换获取当前目录的绝对路径。-maxdepth 1限制搜索深度为当前目录不递归进入子目录。-type f只匹配普通文件排除目录。输出格式为路径/文件名每行一个文件。1.3 脚本化封装可重复使用创建可执行脚本文件get_files.sh#!/bin/bash# 获取当前目录所有文件名并输出到txtlsfilename_list.txtecho文件列表已保存到 filename_list.txt赋予执行权限并运行chmodx get_files.sh ./get_files.sh1.4 特殊字符与编码处理若文件名包含空格、中文或特殊符号建议使用ls -b该选项将非打印字符以八进制转义序列显示。若需保留原始Unicode字符可在脚本开头设置LANGen_US.UTF-8确保终端编码正确。find命令默认输出原始文件名对特殊字符兼容性更好。二、Windows环境下的实现方案2.1 CMD命令提示符方式批处理创建批处理文件获取文件名.cmd内容如下dir /b 文件名列表.txt双击运行后在当前目录生成文件名列表.txt。参数与原理dirWindows内置目录列表命令。/b使用“精简格式”仅显示文件名或文件夹名不含大小、日期等额外信息。与Linux类似重定向标准输出到文件。该方式默认输出系统本地编码如GBK可能在其他编码环境下出现乱码。2.2 PowerShell方式支持编码控制创建PowerShell脚本获取文件名.ps1Get-ChildItem-Path.-File|Select-Object-ExpandProperty Name|Out-File文件名列表.txt-Encoding UTF8执行方法右键脚本文件选择“使用PowerShell运行”。或打开PowerShell终端切换到目标目录执行该命令。参数解析Get-ChildItem -Path . -File获取当前目录下的所有文件排除目录。Select-Object -ExpandProperty Name提取每个文件对象的Name属性即文件名。Out-File -Encoding UTF8以UTF-8编码写入文件有效避免中文乱码。若需同时包含文件夹去掉-File参数即可。三、跨平台对比总结维度LinuxWindows CMDWindows PowerShell核心命令lsdir /bGet-ChildItem重定向符号Out-File默认编码终端Locale通常UTF-8系统代码页如GBKUTF-8需指定仅列出文件find -type fdir /b /a-d-File参数包含完整路径find $(pwd)for /f %i in (dir /b) do echo %cd%\%iGet-ChildItem | % { $_.FullName }四、扩展应用示例4.1 按扩展名筛选Linuxls*.cppcpp_files.txt4.2 按文件大小排序输出Linuxls-lS|awk{print $9}sorted_by_size.txt4.3 Windows下过滤特定类型文件PowerShellGet-ChildItem-Filter*.cpp|Select-ObjectName|Out-Filecpp_files.txt五、常见问题与注意事项文件覆盖与追加覆盖写入追加到文件末尾。隐藏文件Linuxls -a包含隐藏文件。Windowsdir /a显示所有属性文件。权限问题若当前目录为系统保护目录需以管理员身份运行终端或脚本。路径深度控制Linux使用find -maxdepth控制递归深度。PowerShell使用-Recurse -Depth参数PowerShell 5.0。六、总结无论是Linux还是Windows获取目录文件列表并输出至文本文件的核心思路均基于目录遍历系统调用结合输出重定向机制。Linux通过readdir()系统调用实现Windows则通过FindFirstFile/FindNextFileAPI实现。本文提供的命令和脚本可直接应用于日常开发、运维及自动化场景用户可根据具体需求如编码格式、是否递归、是否包含路径选择最适配的方案。