2 votes

Modifier le fichier .command du terminal pour l'exécuter sur plusieurs fichiers

J'ai la tâche ardue de restaurer un vieux projet FCP et je me heurte à un obstacle avec tout un tas de fichiers .mov qui ont été déplacés vers un NAS qui a modifié la carte de ressources des fichiers (la fourche de ressources s'est apparemment cassée ?!). Je dois utiliser FCP7 sur un mac fonctionnant sous OSX 10.10 et malheureusement, cet ordinateur ne peut pas lire les fichiers .mov (VLC les lit très bien). vieux blog écrit par Florian Bogner dans lequel il a écrit un excellent terminal script qui fixe les attributs étendus d'un fichier à la fois. Quelqu'un peut-il suggérer la meilleure façon d'exécuter ce script sur un dossier contenant des centaines de fichiers .mov ?

Voici le script :

#!/bin/bash

clear 
echo '   ____ _______ ______   ______            ______ _______   __'
echo '  / __ \__   __|____  | |  ____|   /\     |  ____|_   _\ \ / /'
echo ' | |  | | | |      / /  | |__     /  \    | |__    | |  \ V / '
echo ' | |  | | | |     / /   |  __|   / /\ \   |  __|   | |   > <  '
echo ' | |__| | | |    / /    | |____ / ____ \  | |     _| |_ / . \ '
echo '  \___\_\ |_|   /_/     |______/_/    \_\ |_|    |_____/_/ \_\'
echo ''
echo ''
echo 'This tool tries to fix the error message'
echo '  "Resource map is incorrect"'
echo 'as reported by Quicktime 7 based Applications.'
echo ''
echo 'Please drop the broken QT7 file into this window and press return:'

while read; do
    # trim the filename
    FILE=$(echo "$REPLY"| sed -e 's/^ *//' -e 's/ *$//')

    # check if the file exists
    if [ -f "$FILE" ]; then
        break
    else
        echo "Can't read this file. Please drop a valid one."
        echo "'$FILE'"
    fi
done

# check if there are EAs
echo ""
LINES=$(xattr -l "$FILE"|wc -l)

if [ "$LINES" -eq "0" ]; then
    echo "Can't fix this file"
    echo "There are no extended attributes associated."
    exit 1  
fi

# now remove the EAs
echo ""
xattr -c "$FILE" &>/dev/null
echo "You can now open this file in QT7."

# create space
echo ""

Merci à tous ceux qui peuvent m'aider dans cette affaire. Salutations

3voto

grg Points 181593

La seule ligne qui fonctionne dans ce script est

xattr -c "$FILE"

Pour exécuter une commande sur tous les fichiers d'un dossier, utilisez find :

find /path/to/folder -type f -exec xattr -c "{}" \;

xattr fournit également le -r pour s'exécuter de manière récursive, de sorte que vous pouvez éviter de trouver étant donné que cette fonctionnalité fait partie de xattr :

xattr -rc /path/to/folder

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X