Re: использование "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»
Вот что делает вся команда:
- find / coe / informatica / v712_OMJ / AONE / SrcFiles / Archive -name * AccessOne_DF_BIFs.txt - рекурсивно искать все файлы "AccessOne_DF_BIFs.txt" в каталоге архива
- cut -f8 -d "/" - Из выходных данных предыдущей команды извлечь восемь полей, разделенных символом "/"
- cut -c 1-12 - извлечь только первые 12 символов
- > /coe/informatica/v712_OMJ/AONE/TgtFiles/ExtendedAOneWeeklySource/WeeklyDeltaFileLoadIDList.dat - записать результаты в файл WeeklyDeltaFileLoadIDList.dat
Re: замена Windows
Моего DOS-фу и PowerShell-фу очень не хватает, поэтому я не могу вам помочь. Тем не менее, вы можете использовать те же команды в Windows, если вы использовали Cygwin или MSYS . Однако обратите внимание, что пути к вашим файлам будут отличаться при доступе из Cygwin / MSYS. Если вы хотите использовать структуры каталогов Windows (например, C: \ my \ windblows \ directory), то у вас может быть больше шансов с MSYS.
~ Обновление ~
Re: эквивалентная команда в 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 - это то, что делает работу. Остальные в основном делают сценарий более читабельным.
Обратите внимание, что « echo% X: ~ 0,13% » не является опечаткой и должно быть эквивалентно « cut -c 1-12 ».
Бьюсь об заклад, есть более чистые и элегантные способы сделать это. Это была моя первая попытка DOS-фу, так что будьте милы.
Источники: