Bonjour , Je suis en train de déplacer tous les fichiers avec .hi
et l' .o
extension d'un dossier cible /src
dans un autre dossier/Obj
Jusqu'ici j'ai essayé:
srcpath=$(pwd)"/src"
ghc src/Main.hs > Logs/output.txt 2> Logs/Err.txt //this builds the project and generates the binaries and .hi files
mv *.hi *.o $srcpath/src/ Obj/ //i want to move all these files to Obj/ folder but where do i place the extension arguments?
Comment la commande devrait-elle être: mv extensions source dest ?
oumv source dest extensions
J'ai essayé:
srcpath=$(pwd)"/src"
objpath=$(pwd)"/Obj"
ghc src/Company.hs > Logs/output.txt 2> Logs/Err.txt
mv *.o *.hi $srcpath $objpath
Et j'obtiens l'erreur suivante:
mv: cannot stat '*.o': No such file or directory
mv: cannot stat '*.hi': No such file or directory
mv: cannot move '/c/Users/[..]/src' to '/c/Users/[...]/Obj/src': Device or resource busy
extension0 $srcpath.....extensionN $srcpath
N'y a-t-il aucun moyen de le faire[extension0...extensionN] $srcpath
@
supports de l'indice? 2. Lorsque vous écrivez$srcpath/$i
eti
est1
par exemple, il sélectionne tous les fichiers avec l'*.hi
extension?mv $srcpath/${arr[1]} $objpath
, puis seuls les fichiers * .hi seront déplacésVous semblez traiter
*.o
et*.hi
comme une sorte de filtres utilisés parmv
. Ce n'est pas comme ça que ça marche. L'outil attend des chemins. Votre shell peut développer*.o
et*.hi
à tous les chemins d' accès locaux appropriés à partir du répertoire courant; si cela fonctionnait,mv
verrait des chemins, pas des modèles. Apparemment, vous n’avez pas de fichiers correspondants, donc ces modèles ne sont pas développés et ne sont pas reproduitsmv
tels quels.etc.
Ces syntaxes peuvent fonctionner:
Néanmoins, il échouera (un peu) s’il n’ya pas de fichiers correspondants dans
./src
. Vous pouvez introduire des variables comme vous l’avez fait, mais$(pwd)
,srcpath="./src"
devrait être suffisant;en général, vous devriez citer vos variables (mais pas les motifs), par exemple:
S'il y a trop de fichiers, vous frapperez
argument list too long
.Cette solution alternative utilisant
find
devrait fonctionner avec un nombre élevé de fichiers ou aucun fichier:Voir
man 1 find
pour apprendre comment ça-exec
marche. Notez également que grâce aux guillemets, les chaînes comme"*.o"
ne sont pas développées par le shell ici;find
les obtient littéralement et utilise sa procédure de correspondance de modèle intrinsèque.La solution sera exécutée séparément
mv
pour chaque fichier. Nous pouvons passer beaucoup d'arguments àmv
grâce à lafind … -exec … {} +
syntaxe, mais puisque la syntaxe exige que ces arguments soient à la toute fin, nous avons besoinmv
de support-t
(ce n'est pas requis par POSIX, donc vousmv
pouvez ou non le supporter):la source