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
Run Code Online (Sandbox Code Playgroud)
请让我知道使用
cut -f8 -d and -name *AccessOne_DF_BIFs.txt //this is a file name in unix box
Run Code Online (Sandbox Code Playgroud)
回复:“cut -f8 -d”和“find -name”的使用
cut -f8 -d "/"
Run Code Online (Sandbox Code Playgroud)
这为您提供了由“/”分隔的字符串中的八个字段。所以在像 "a/b/c/d/e/f/g/h/i/j" 这样的字符串上它会给你 "h"
find /coe/informatica/v712_OMJ/AONE/SrcFiles/Archive -name *AccessOne_DF_BIFs.txt
Run Code Online (Sandbox Code Playgroud)
-name 选项指定要匹配的模式。上面的整个命令将递归搜索存档目录中以“AccessOne_DF_BIFs.txt”结尾的所有文件
这是整个命令的作用:
回复:Windows 更换
我的DOS-fu和PowerShell-fu严重缺乏,所以我无法帮助你。但是,如果您使用Cygwin或MSYS ,则可以在 Windows 上使用相同的命令。但是请注意,从 Cygwin/MSYS 中访问时,文件的路径会有所不同。如果您希望使用 windows 目录结构(例如 C:\my\windblows\directory),那么您可能有更好的机会使用 MSYS。
~更新~
re: DOS 中的等效命令
在喝咖啡休息时试了一下,这似乎对我有用。
DOS-fu:
@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%
Run Code Online (Sandbox Code Playgroud)
不完全是您可以使用 Unix 'find' 和 'cut' 获得的单行,但它只使用内置的 DOS 指令完成相同的工作(我希望)。
FOR 循环的作用是什么。其余的主要是为了使脚本更具可读性。
请注意,“ echo %X:~0,13% ”不是拼写错误,应该等同于“ cut -c 1-12 ”。
我敢打赌有更干净、更优雅的方法来做到这一点。这是我对 DOS-fu 的第一次尝试,所以请保持友善。
资料来源: