find /coe/informatica/v712_OMJ/AONE/SrcFiles/Archive -name *AccessOne_DF_BIFs.txt|cut -f8 -d "/"|cut -c 1-12 > /coe/informatica/v712_OMJ/AONE/TgtFiles/ExtendedAOneWeeklySource/WeeklyDeltaFileLoadIDList.dat
请让我知道使用
cut -f8 -d and -name *AccessOne_DF_BIFs.txt //this is a file name in unix box
答案1
回复:“cut -f8 -d”和“find -name”的使用
cut -f8 -d "/"
这将为您提供以“/”分隔的字符串中的八个字段。因此,对于“a/b/c/d/e/f/g/h/i/j”这样的字符串,它将为您提供“h”
find /coe/informatica/v712_OMJ/AONE/SrcFiles/Archive -name *AccessOne_DF_BIFs.txt
-name 选项指定要匹配的模式。上面的整个命令将递归搜索 Archive 目录中以“AccessOne_DF_BIFs.txt”结尾的所有文件
整个命令的作用如下:
- 查找/coe/informatica/v712_OMJ/AONE/SrcFiles/Archive -name *AccessOne_DF_BIFs.txt- 递归查找存档目录中的所有“AccessOne_DF_BIFs.txt”文件
- 剪切-f8-d“/”- 从上一个命令的输出中提取以“/”分隔的八个字段
- 剪切 -c 1-12- 仅提取前 12 个字符
- > /coe/informatica/v712_OMJ/AONE/TgtFiles/ExtendedAOneWeeklySource/WeeklyDeltaFileLoadIDList.dat- 将结果写入 WeeklyDeltaFileLoadIDList.dat 文件
回复:Windows 替换
我的DOS系统和PowerShell 功能严重缺乏,所以我无法帮助你。但是,如果你使用过赛格威或者管理系统。但请注意,从 Cygwin/MSYS 访问时,文件的路径会有所不同。如果您希望使用 Windows 目录结构(例如 C:\my\windblows\directory),那么使用 MSYS 可能更合适。
~ 更新 ~
回复:DOS 中的等效命令
在咖啡休息期间尝试了一下,这似乎对我有用。
DOS功能:
@echo off
:: Source directory
set SRCDIR="C:\coe\informatica\v712_OMJ\AONE\SrcFiles\Archive"
:: Pattern to match
set TARGET="*AccessOne_DF_BIFs.txt"
:: Set output file
set OUTFILE="C:\coe\informatica\v712_OMJ\AONE\TgtFiles\ExtendedAOneWeeklySource\WeeklyDeltaFileLoadIDList.dat"
:: Store current working directory so we can send user back
set PWD=%cd%
:: Move to source directory so our "dir" command will work
cd %SRCDIR%
:: Reset previous output file
del %OUTFILE%
:: This is where the script actually starts
FOR /F "usebackq tokens=8 delims=\" %%a IN (`dir %TARGET% /s/b`) DO (
set X=%%a
echo %X:~0,13%
) >> %OUTFILE%
:: Send user back to where he/she was
cd %PWD%
虽然它不完全是使用 Unix 的“find”和“cut”可以获得的单行命令,但是它仅使用内置的 DOS 命令就可以完成相同的工作(我希望如此)。
FOR 循环就是完成这项工作的。其余部分主要是为了使脚本更具可读性。
注意 ”回显 %X:~0,13%“ 不是拼写错误,应该等同于“剪切 -c 1-12“。
我敢打赌肯定有更干净、更优雅的方法来实现这一点。这是我第一次尝试 DOS-fu,所以请多多包涵。
资料来源:
答案2
您能安装类似 UNIX 的软件包(例如 Cygwin)吗?
或者也许安装诸如 Perl 之类的脚本语言?
你的命令真的有效吗?可能是 find 中缺少 -print。
find -name xxx
查找指定的文件名
cut -f 8 -d "/"
拆分成以 / 分隔的字段,取第 8 个
在原始的 Windows 命令行中,这样的事情并不是那么顺利,因此建议安装一个更好的脚本环境。
答案3
要在 DOS 命令中替换 cut 类型“help for”
看看语法:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
相反(myfile.txt)指定*AccessOne_DF_BIFs.txt
使其递归使用循环
答案4
对于 *nix 工具到 Windows 的移植,请使用GNU