Linux:管道`查找`文本文件列表| `dos2unix` | `dd`命令

Adr*_*rie 1 bash pipe ubuntu-14.04

我正在尝试做什么:

  • 第1行:找到任何.txt或.TXT文件并将它们输入下一个命令
  • 第2行:将.txt文件转换为unix格式(摆脱Windows行结尾)
  • 第3行:删除文件的最后一行,该行始终为空白
find "${TEMPDIR}" -name *.[Tt][Xx][Tt] | /
xargs dos2unix -k | /
dd if=/dev/null of="$_" bs=1 seek=$(echo $(stat --format=%s "$_" ) - $( tail -n1 "$_" | wc -c) | bc )
Run Code Online (Sandbox Code Playgroud)

我无法将(EDIT 输出)文件名传输xargs dos2unix -k | /到第三行,我收到以下错误:

stat: cannot stat '': No such file or directory
tail: cannot open '' for reading: No such file or directory
dd: failed to open '': No such file or directory
Run Code Online (Sandbox Code Playgroud)

显然,我错误地认为这"$_"足以通过管道传递输出.

如何将输出(文本文件)传输xargs dos2unix -k到第三行,dd if=/dev/null of="$_" bs=1 seek=$(echo $(stat --format=%s "$_" ) - $( tail -n1 "$_" | wc -c) | bc )

第3行的解决方案来自另一个关于从文件中删除最后一行的问题的答案,特别是这个答案被吹捧为大文件的一个很好的解决方案:https://stackoverflow.com/a/17794626/ 893766

ani*_*ane 5

这可以帮忙吗?

find "${TEMPDIR}" -iname '*.txt' -exec dos2unix "{}" \; -exec sed -i '$d' "{}" \;
Run Code Online (Sandbox Code Playgroud)

  • @tripleee:但是在`{}`周围加上引号并没有对*filename*,引用或其他方面做任何事情 - 它甚至都不会到达`find`进程.引号只是"保护"`{}`到达`find`进程 - 当然,不需要这样的保护,但也没有任何伤害:) (2认同)