Fastest recursive search for files

63 visualizzazioni (ultimi 30 giorni)
KAE
KAE il 10 Lug 2020
Commentato: KAE il 31 Gen 2024
From this answer, I learned that dir can search recursively for files in subdirectories, and it is about 3X faster than what I had been using earlier, getfilenames. However now I am searching a remote directory containing many subdirectories with thousands of files, and the dir command takes 30+ minutes to execute. Is there a faster way? I am happy to call something outside of Matlab, like find in the accepted answer here.

Risposta accettata

Adam Danz
Adam Danz il 28 Gen 2024
Modificato: Adam Danz il 28 Gen 2024
Here's an Easter egg. I rarely answer non-MATLAB questions here but since I had to solve this today, I thought I'd share.
This batch file finds all .fig files in a directory and its subfolders (recursive search). Instructions:
  1. Create a new file with the .cmd or .bat extension.
  2. Copy-paste the script below into the file, adjusting the variables as needed.
  3. Update this line to specify the search directory: set "SEARCH_DIR=\\abc\def\"
  4. Update this line to specify the output file name, saved to the same directory as the cmd file: set "OUTPUT_FILE=FigFilesList.txt"
  5. Update the search term: (*.fig)
  6. Double-click on the file to execute the batch script.
Upon execution, the script will...
  • ...open the terminal command window
  • Search through the specified directory and its subdirectories for files with the .fig extension.
  • Output the paths of these files to a text file named FigFilesList.txt.
  • Every 200 fig files found, a message will be displayed in the terminal to indicate progress.
  • A message will appear at the end to indicate that the seaerch is complete.
@echo off
setlocal EnableDelayedExpansion
set "SEARCH_DIR=\\abc\def\"
set "OUTPUT_FILE=FigFilesList.txt"
echo Listing all .fig files in %SEARCH_DIR% and subfolders:
echo File list generated on %DATE% at %TIME% > "%OUTPUT_FILE%"
set /a FILE_COUNT=0
set /a MODULUS=200
for /R "%SEARCH_DIR%" %%i in (*.fig) do (
echo %%i >> "%OUTPUT_FILE%"
set /a FILE_COUNT+=1
set /a RESULT=!FILE_COUNT! %% !MODULUS!
if !RESULT! equ 0 (
echo Number of .fig files found so far: !FILE_COUNT!
)
)
echo List of .fig files saved to %OUTPUT_FILE%
echo **********Search complete**********
echo PROCESS COMPLETE >> "%OUTPUT_FILE%"
endlocal

Più risposte (0)

Categorie

Scopri di più su File Operations in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by