Si vous souhaitez tout déplacer sauf les répertoires de $SOURCE_DIR
à $TARGET_DIR
, vous pouvez utiliser cette commande:
find "$SOURCE_DIR" -maxdepth 1 -not -type d -exec mv -t "$TARGET_DIR" -- '{}' +
Expliqué en détail:
find
: La recherche de recherche de fichiers dans un répertoire
$SOURCE_DIR
: Le répertoire dans lequel effectuer la recherche
-maxdepth 1
: Ne regardez pas à l'intérieur des sous-répertoires
-not -type d
: Ignorer les répertoires
- Vous pouvez également utiliser
-type f
si vous souhaitez uniquement copier des choses qui sont strictement des fichiers, mais je préfère ce qui précède car il capture également tout ce qui n'est ni un fichier ni un répertoire (en particulier les liens symboliques)
-exec mv -t "$TARGET_DIR" -- '{}' +
: Exécutez la commande mv -t "$TARGET_DIR" -- FILES...
où se FILES...
trouvent tous les fichiers correspondants (merci @DavidFoerster)
find ... -exec mv -t "$TARGET_DIR" -- '{}' +
serait plus sûr (dans le cas où il$TARGET_DIR
n'y a pas de répertoire ou la correspondance commence par-
) et plus efficace (car il ne génère pas de nouveau sous-processus pour chaque fichier correspondant).Je pense que vous voulez uniquement mv vos fichiers. Tout d'abord, allez dans votre répertoire et utilisez cette commande, remplacez $ TARGET par le chemin de votre répertoire cible. Si vous souhaitez copier vos fichiers, remplacez
mv
parcp
.si j'explique cela,
find . -type f
signifie sélectionner tous les fichiers et-exec mv {} $TARGET \;
signifie exécuter lamv
commande pour tous les éléments sélectionnés.La réponse précédente a une erreur .. il contient également
mv
tous les fichiers dans les sous-répertoires. La solution rapide est l'utilisation-maxdepth 1
. Ensuite, il ne récursive pas lesmv
fichiers dans les sous-répertoires. Ci-dessous est le bon ..la source
-type f
n'empêche pas la récursivité.Approche Python
Lorsque vous traitez des fichiers de manière récursive,
find
c'est la voie à suivre. Dans ce cas particulier, ce n'est pas nécessaire, mais peut être utilisé avec-maxdepth 1
comme d'autres réponses le montrent.Une simple commande python peut également le faire. Voici un exemple:
Comment cela fonctionne:
fl=[f for f in os.listdir('.') if os.path.isfile(f)]
itère tous les élémentsos.listdir('.')
trouvés et nous testons si l'élément est un fichier utilisant laos.path.isfile()
fonction.Une fois
fl
la liste des fichiers construite, nous utilisons lamap()
fonction. Cette fonction prend deux arguments - une fonction et une liste d'éléments; il exécutera la fonction que nous lui avons donnée pour chaque fichier d'une liste. Ainsi, nous avons icilambda x:shutil.move(x,'./a_directory')
une fonction anonyme qui déplace un fichier donné vers un répertoire donné, puis nous avons lafl
- la liste des fichiers que nous avons créés.Pour plus de lisibilité et d'utilisation générale, nous pourrions également réécrire ceci en un script python général, qui prend deux arguments - le répertoire source et le sous-répertoire de destination.
Et l'utilisation est comme ça:
la source
Si vous utilisez zsh au lieu de bash, vous pouvez le faire:
Le
(.)
à la fin est appelé un qualificatif glob; l'.
intérieur signifie spécifiquement de ne faire correspondre que les fichiers normaux.Faire un
mv *(.) "$target"
est rapide et pratique. Cependant, si vous faites cela dans le cadre d'un script, vous voudrez peut-être envisager d'écrire quelque chose comme ce que Frxstrem et David Forester ont suggérémv -t "$target" -- *(.)
, pour mieux gérer les cas d'angle qui pourraient survenir dans l'utilisation d'autres personnes.la source
mv -t "$TARGET" -- "$SOURCE"/*(.)
serait plus sûr (au cas où"$TARGET"
commence par-
ou n'est pas un répertoire). J'aime bien la solution zsh!Pour déplacer tout sauf les répertoires d'un
source-dir
répertoire à l'autredestination-dir
, en Python:Voir Exécution d'un fichier Python dans le terminal .
la source
import mypackage
avantfrom mypackage import ...
from __future__
importations spéciales et lesfrom pathlib
importations ordinaires .import module
devrait être le premier (qui est les importations de bibliothèques et de tiers)from module import object
devrait être le dernier (local / spécifique à la bibliothèque)J'utiliserais
cela fonctionnera tant que vos dossiers n'auront pas d'extensions.
la source