-1
votes

Comment créer la structure de dossiers ci-dessous en utilisant Python ou Shell?

Entrez la description de l'image ici

Il s'agit d'un exemple de structure de mon système de fichiers, j'ai des noms de dossiers dans .Text Fichier et j'appelle ce fichier dans mon script shell ou Python Comment puis-je créer cette structure de fichier récursivement et je n'ai besoin que de noms de dossiers dans la structure ci-dessous? p>

d-r-x   - moka.babu HDFS   0 2018-08-23 12:58 /HCDLPRD/user
d-r-x   - moka.babu HDFS   0 2018-08-23 12:58 /hcdlprd/user/moka.babu
d-r-x  -  moka.babu HDFS   0 2018-08-23 12:58 /hcdlprd/user/moka.babu/hive


3 commentaires

Comment le fichier .txt a-t-il l'air explicitement?


mes lignes comme celle-ci à 20k ci-dessus


@ C.Nivs Yeah Posté Pic, juste vérifier


4 Réponses :


0
votes

Vous pouvez lire les lignes dans, diviser chaque ligne dans l'espace avec .split ('') puis indexez la dernière valeur pour obtenir le nom du dossier. Alors juste importer os suivi avec pour dossier dans les dossiers: os.mkdir (dossier)

Voici un exemple avec une erreur de base Imprimera quel fichier n'a pas pu être créé: xxx


0 commentaires

0
votes

dans n'importe quel shell: xxx

la commande créera toute la structure.


0 commentaires

0
votes

Essayez ceci xxx

Vous pouvez voir les structures créées.


4 commentaires

J'ai 26 000 lignes comme cette structure


Tous ceux-ci sont des annuaires?


Ils sont sortis de LS -LTR qui contient une tonne d'informations inutiles. Les vôtres fonctionnent parfaitement si le fichier ne contient que des chemins, ce qui ne le fait pas. Pas une frappe contre votre réponse, comme vous avez posté avant l'OP, l'OP a clarifié le contenu du fichier


Je n'étais pas sûr si le contenu du fichier a la sortie ls ou uniquement les chemins. Et analyser la sortie de ls est fou. J'aurais utilisé trouver pour obtenir la structure à la place.



2
votes

Utilisation de Python

OP a déclaré que LS -LTR a été explicitement copié dans un fichier. Nous pouvons le nettoyer avec awk d'abord pour obtenir simplement les fichiers dans le fichier xxx

ceci divisera chaque ligne en morceaux par plusieurs espaces et envoyer le Nom de fichier (dans la colonne 9) au fichier, cédant les éléments suivants: xxx

en python: xxx

à bash < / H2>

Vérifiez la réponse de Hansolo, car cela sera effectivement le même

EDIT: Si un dossier dans un répertoire pourrait ne pas

Dans le cas où vous avez un dossier: /hcdlprd/user/head/some/dir/file.txt/dir/file.txtock/dir/file.txtocke tête n'a pas été créé par le script avant cette ligne, vous pouvez créer une solution plus robuste: xxx

au cas où awk est un peu bizarre pour conceptualiser, nous pouvons tout emballonner en python en traitant chaque ligne avec les lignes suivantes : xxx


10 commentaires

@ D-R-X - Moka.Babu HDFS 0 2018-08-23 12:58 / HCDLRD / Utilisateur Ma structure de dossier comme ceci, j'ai besoin que de dernier paramètre


Oh, vous avez donc explicitement enregistré ls -ltr dans un fichier


OK, mon édition au début devrait aider à obtenir le fichier dans un format plus agréable.


Merci @ c.Nivs cette structure de dossiers dans un environnement de cluster, je reproduit ce même cluster, j'ai donc essayé de trouver tous les fichiers à l'aide de HDFS DFS -LS -R / PROD | grep "^ d" >> /tmp/a.txt, ce fichier A.txt est supérieur à un. Maintenant, je n'ai besoin que de noms de fichiers dans ce fichier.Je DNT Besoin de tous les paramètres.


La commande awk devrait faire cela


J'ai ajouté une implémentation de python de ce que awk fait au bas de ma réponse


dans le système de fichiers Hadoop awk ne fonctionne pas?


Donc, la question doit être intitulée Comment créer des dossiers dans HDFS pas Comment créer des dossiers en python / coquille et marquée en conséquence


Merci pour l'aide, j'avais besoin de python ou de shell uniquement parce que je dois exécuter ces fichiers à Linux env


Vous pouvez tuyer ls -ltr à partir de hdfs dfs à awk comme les suivants: HDFS DFS -LS -R / PROD | Awk -f '[[: Espace:]] +' 'NR> 1 {IMPRESSION 9 $}' >> quelquefile.txt . Cependant, il est considéré comme une mauvaise pratique de tuyer ls