linux - 可以找到将找到的文件的文件名推送到管道中吗?

标签 linux bash gnu-findutils

我想在一些 dir 中查找,并对这个目录中的文件执行 awk,然后用每个结果替换原始文件。

find dir | xargs cat | awk ... | mv ... > filename

所以我需要最后一个命令中的文件名(由 find 找到的每个文件)。我该怎么做?

最佳答案

我会使用循环,例如:

for filename in `find . -name "*test_file*" -print0 | xargs -0`
do
    # some processing, then
    echo "what you like" > "$filename"
done

编辑:如评论中所述,-print0 | 的好处xargs -0 由于 for 循环而丢失。包含空格的文件名仍未正确处理。

下面的 while 循环也不会处理不寻常的文件名(很高兴知道它,虽然它不在问题中),但至少具有标准空格的文件名,所以它工作得更好,确实:

find . -name "*test*file*" -print > files_list

while IFS= read -r filename
do
    # some process
    echo "what you like" > "$filename"
done < files_list

关于linux - 可以找到将找到的文件的文件名推送到管道中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436805/

相关文章:

bash - bash 中的源脚本,脚本中存在 $ 字符

linux - 在每个目录中查找子目录和进程文件的名称

linux - 如何使用 tr 替换 '--' 字符串

linux - 为什么 Linux GNU 找不到 -size 匹配 du 或 ls -l?

Unix find -mtime {一个负值或正值}

sql - 我下载了 mac os 的 mssql 工具,但它说 "sqlcmd: command not found"

sql-server - MSSQL 服务在 ubuntu 上启动失败

python - PIP 安装无法找到 ffi.h,即使它识别 libffi

linux - tcsh shell linux 非法变量名

bash - 如何继续重新启动 Windows cmd 提示符