Mac Terminal recherche et déplace les fichiers ne contenant pas de motif dans le nom

J’utilise un programme pour extraire de la musique radio. Malheureusement, on ne peut pas définir le dossier temporaire en dehors du dossier où les fichiers MP3 finis se retrouvent plus tard. Je ne peux donc pas définir le dossier de sortie pour l’append automatiquement à iTunes.

Je peux bien coder Java et ce qui ne l’est pas, mais je n’ai aucune expérience avec les scripts shell.

J’ai besoin d’un script qui parcourt tous les fichiers d’un dossier toutes les 10 minutes et les déplace vers un autre emplacement s’ils ne commencent pas par la chaîne “Track”. Tous les fichiers temporaires sont appelés “Track …” et ne doivent donc que déplacer les fichiers finis. Quelqu’un pourrait-il me donner une aide pour commencer? Merci!

Voici un exemple de script. Vous devez définir le répertoire DESTINATION correctement avant de décommenter la ligne qui déplace les fichiers. Sinon, vous risquez de les déplacer quelque part indésirables.

Dans le terminal, cd à l’emplacement où vous enregistrez l’extrait ci-dessous et exécutez les commandes suivantes pour exécuter.

Travail de préparation:

  • cd / save / location
  • chmod + x file_mover.sh # rend le fichier exécutable

Programmer un travail:

  • crontab -e
  • * / 10 * * * * /path/to/file_mover.sh
  • crontab -l # affiche la liste des tâches planifiées

Avec quelques modifications mineures, vous pouvez accepter cette option.

#!/bin/bash # files to skip REGEX='^TRACK' # location to move the files DESTINATION=/tmp/mydir # directory to read from # PWD is the working directory TARGET=${PWD} # make the directory(ies) if it doesn't exists if [ ! -f ${DESTINATION} ]; then mkdir -p ${DESTINATION} fi # get the collection of files in the for FILE in $( ls ${TARGET} ) do # if the current file does not begin with TRACK, move it if [[ ! ${FILE} =~ ${REGEX} ]]; then echo ${FILE} # SET THE DESTINATION DIRECTORY BEFORE UNCOMMENTING THE LINE BELOW # if [ -f ${FILE} ]; then # uncomment if you want to # ensure it's a file and not a directory # mv ${FILE} ${DESTINATION} # move the file # fi # uncomment to ensure it's a file (end if) fi done 

Modifiez le crontab avec EDITOR=nano crontab -e et ajoutez une ligne comme celle-ci:

*/10 * * * * shopt -s extglob; mv ~/Music/Temp/!(Track)*.mp3 ~/Music/iTunes/iTunes\ Media/Automatically\ Add\ to\ iTunes.localized/

shopt -s extglob ajoute le support pour !() . Voir /usr/share/doc/bash/bash.html .