Mon répertoire ressemble à celui ci-dessous avec quelques fichiers.
Annuaire --111_file.txt --222_file.txt --111_file2.txt --222_sample.txt
Je souhaite copier tous les fichiers commençant par 111 dans un répertoire séparé et 222 dans un répertoire différent. Je ne sais pas comment parcourir le répertoire et trouver des fichiers qui commencent par le même nom.
3 Réponses :
Le script bash suivant copie tous les fichiers avec une correspondance de modèle:
cp 111* dir1; cp 222* dir2;
Si vous souhaitez implémenter cela dans un programme utilisant Python, vous pouvez utiliser le shutil module, par exemple:
import os import re from glob import glob # Source path source = '/Users/path/to/source' files = glob(source + '/**', recursive=True) # '/**' and recurvise=True allow to search in subdirectories files_to_move = [f for f in files if re.match('^\d', os.path.split(f)[1])] # '^\d' searchs for every files which start with a digit
Pour rechercher des fichiers avec une condition dans le répertoire et les sous-répertoires de manière récursive, vous pouvez utiliser le couplage glob
à re :
# importing shutil module import shutil # Source path source = '/Users/path/to/source' # Destination path destination = '/Users/path/to/destination' # Move the content of source to destination dest = shutil.move(source, destination)
Veuillez vérifier le commentaire
Hé en python, vous pouvez utiliser shutil
lib.
Par exemple:
import shutil import os prefix_1 = '111' prefix_2 = '222' curr_working_dir = os.getcwd() target1 = 'traget_path_1' target2 = 'target_path_2' files = os.listdir() #Path which includes you source files for file in files: if prefix_1 in file: shutil.copyfile(curr_working_dir+'/'+file,target_1) elif prefix_2 in file: shutil.copyfile(curr_working_dir+'/'+file,target_2) else: pass
Meilleures salutations
Veuillez vérifier le commentaire.
Ce n'est pas toujours 111 ou 222, il peut avoir n'importe quel nombre de chemins de fichiers différents. Il doit traverser tout le répertoire et copier les fichiers qui commencent par le même nom dans un dossier. De plus, je ne connais pas le nom du fichier, je sais juste qu'il commence par un numéro.