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-фу, так что будьте милы.
Источники: