File Move to Sub Directory
Post any question you may have in regards to GoAnywhere Director and let our talented support staff and other users assist you.
5 posts
Page 1 of 1
How do I move the File to sub directories based on File name meta data.
My File would be in the format /usr/work/ABCD-xyz-123.txt
That needs to be Moved to /usr/work/ABCD/ABCD-xyz-123.txt
FTP Server is GoAnywhere Services.. (In case, I can do this directly using Triggers please suggest)
Here is a Sample Project... That I envision. (Please suggest any other way that this can be achieved).
My File would be in the format /usr/work/ABCD-xyz-123.txt
That needs to be Moved to /usr/work/ABCD/ABCD-xyz-123.txt
FTP Server is GoAnywhere Services.. (In case, I can do this directly using Triggers please suggest)
Here is a Sample Project... That I envision. (Please suggest any other way that this can be achieved).
Code: Select all
<project name="MovetoSub" mainModule="Main" version="1.0">
<module name="Main">
<ftp version="1.0" resourceId="FTP Server">
<list label="FilestoMove" fileListVariable="FilestoMove">
<fileset dir="/usr/work" recursive="false">
<wildcardFilter>
<include pattern="*IncludePattern*" />
</wildcardFilter>
</fileset>
</list>
</ftp>
<forEachLoop itemsVariable="${FilestoMove}" currentItemVariable="currFile">
<setVariable version="2.0" label="DirName" value="????" />
<ftp version="1.0" resourceId="FTP Server">
<mkdir dir="/usr/work/${DirName}" />
<move sourceFile="${currFile}" destinationFile="/usr/work/${DirName}/${currFile:file} />
</ftp>
</forEachLoop>
</module>
</project>
- Support Specialist
- Posts: 12
- Joined: Thu Mar 05, 2009 10:20 am
Can it be assumed that the folder ABCD already exists, or must it be created dynamically? If there are a finite set of file prefixes, and the folders can be created beforehand, it is much simpler.
Please let us know and we can post a sample project.
Please let us know and we can post a sample project.
For already existing folders,, I was able to run this Sample Project....
The issue is when I had to create these Folders also......
The issue is when I had to create these Folders also......
Code: Select all
<project name="RSS" mainModule="Main" version="1.0">
<module name="Main">
<ftp version="1.0" resourceId="FTP Server">
<rename searchPattern="(.*?)-(.*)" patternType="regex" replaceWith="$1/$1-$2">
<fileset dir="/usr/work" recursive="false" />
</rename>
</ftp>
</module>
</project>
- Support Specialist
- Posts: 12
- Joined: Thu Mar 05, 2009 10:20 am
There is no direct way this can be accomplished in GoAnywhere Director, however, we have a workaround that will work (See below). We have opened a case to add functionality to make this easier to accomplish in a future release.
Code: Select all
<project name="Rename File to Sub Directory" mainModule="Main" version="1.0" logLevel="normal">
<module name="Main">
<createWorkspace version="1.0" />
<ftp resourceId="GoAnywhere Services FTP Server" version="1.0">
<list label="Get List of Files to Move" fileListVariable="ftpFiles" numFilesFoundVariable="numFiles">
<fileset dir="/inbound/">
<wildcardFilter>
<include pattern="*-*-*" />
</wildcardFilter>
</fileset>
</list>
</ftp>
<print file="filename.csv" version="1.0" />
<forEachLoop itemsVariable="${ftpFiles}" currentItemVariable="file" logLevel="silent">
<print label="Write File Names to CSV in Workspace" file="filename.csv" append="true" version="1.0">
<![CDATA[${file:name}${system.lineFeed}]]>
</print>
</forEachLoop>
<searchAndReplace label="Replace dash with tilde" inputFile="filename.csv" outputFile="filename2.csv" searchFor="-" replaceWith="~" version="1.0" />
<readCSV label="Parse File Names into Chunks" inputFile="filename2.csv" outputRowSetVariable="nameParts" fieldDelimiter="tilde" recordDelimiter="LF" skipInvalidRecords="true" version="1.0" />
<forEachLoop itemsVariable="${nameParts}" currentItemVariable="namePart" logLevel="silent">
<ftp label="Connect and Move Each File" resourceId="GoAnywhere Services FTP Server" version="1.0" logLevel="normal" executeOnlyIf="${numFiles} gt 0">
<cd label="CD to Appropriate Folder" dir="/inbound" />
<move label="MOVE each File" sourceFile="${namePart[1]}-${namePart[2]}-${namePart[3]}" destinationFile="${namePart[1]}/${namePart[1]}-${namePart[2]}-${namePart[3]}" />
</ftp>
</forEachLoop>
<deleteWorkspace version="1.0" disabled="false" />
</module>
</project>
5 posts
Page 1 of 1