Hi hi
I have been trying to do search in text files and use the text I find to rename the file.
I can use BBedit, open each file and search for the text with grep, copy what I find and save the file with that name. But that is not fast enough for me. When the files are over 1000 this is way to slow.
Does anyone know a better way?
Here is my problem in a nutshell:
I have lot of textfiles
I need to search each for text f.ex anytext (using (.*))
Rename the file to “anytext.txt”
assuming the pattern exists only once in the files
and the text encoding is MacRoman, put all files in a folder and try this script,
You will be prompted for the folder. The error handling is quite poor. If any error occurs, the file will be skipped
set theFolder to choose folder
tell application "Finder" to set theFiles to files of theFolder
set TID to text item delimiters
repeat with oneFile in theFiles
try
set theText to read (oneFile as alias)
set text item delimiters to "<html>"
set theName to text item 2 of theText
set text item delimiters to "</html>"
set theName to text item 1 of theName & ".txt"
tell application "Finder" to set name of contents of oneFile to theName
end try
end repeat
set text item delimiters to TID
Being a Python nut I could not resist to write a small script using Python’s re module. You can inspect and download the script here. Once you put it on your Desktop, you can execute the AppleScript code below. The script will ask you to choose a folder containing the text files and then process every file in this folder, searching for ((.*)) and renaming the file accordingly if possible.
Please test-drive the script on a dummy folder first!
property mytitle : "Renamy"
on run
try
set folderpath to (choose folder with prompt "Please choose a folder to process" without invisibles and multiple selections allowed)
set folderpath to quoted form of (POSIX path of folderpath)
set pyscriptpath to quoted form of (POSIX path of (((path to desktop) as Unicode text) & "rename.py"))
set command to "/usr/bin/python " & pyscriptpath & " " & folderpath
do shell script command
on error errmsg number errnum
if errnum is not equal to -128 then
my dsperrmsg(errmsg, errnum)
end if
end try
end run
on dsperrmsg(errmsg, errnum)
tell me
activate
display dialog "Sorry, an error occured:" & return & errmsg & return & "(" & errnum & ")" buttons {"OK"} default button 1 with icon stop giving up after 20 with title mytitle
end tell
end dsperrmsg
The script does not work well in case it finds special chars in the tags (e.g. German Umlauts), because you did not specify any text encoding (e.g. UTF-8, MacRoman).
I can also offer a Obj-C Foundation tool command line solution ;),
but I think in an AppleScript forum we should prefer AppleScript solutions,
especially if they are as easy to create as this one.
So here we have Martin Michel and StefanK. One from Germany and one from Switzerland. They can communicate really well in the real world with English, but not so well in the scripting world. That just seems wrong to me!
OK, here it is, it’s called renameFileByTag, you can download it here (source file included)
The syntax is: /path/to/renameFileByTag /path/to/sourceDirectory tag encoding sourceDirectory must be a valid path tag can be any tag. For example html takes the first found value between and encoding is optional. No value is MacRoman, valid expressions are MacRoman, ISO8859-1, UTF8 and UTF16
My dear, we can even communicate perfectly in german :lol:
In the scripting world we have AppleScript as the least common denominator, this is sufficient