Utiliser Bash
Donc, disons que j'ai un tas de files randomment placés dans un directory parent ~/src
, je veux récupérer tous les files correspondant à un certain suffixe et les déplacer (ou les copyr) dans un directory ~/dist
.
Supposons à cet effet que tous les noms de files ont cette convention d'appellation:
<filename_prefix>.<filename_suffix>
J'ai découvert que c'était un moyen rapide d'get tous les files avec un filename_suffix
particulier et de les mettre dans un dossier dist:
mkdir ~/dst find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
Maintenant, un pas de plus … comment puis-je utiliser la sortie de find, dans ce cas filename
, et utiliser le filename_prefix
pour générer un directory du même nom dans ~/dist
puis déplacer (ou copyr) tous les files avec ce préfixe dans le directory approprié?
mkdir ~/dst find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \;
Essentiellement, comment puis-je modifier la command ci-dessus (ou peut-être utiliser une autre command) pour créer une structure comme celle-ci
(SORTIE)
~/dist/people/people.xrt ~/dist/games/games.xrt ~/dist/games/games.moo ~/dist/games/games.ini ~/dist/monkeys/monkeys.ini ~/dist/monkeys/monkeys.xrt
à partir d'un tree de directorys comme celui-ci?
(CONTRIBUTION)
~/src/xrt/people.xrt ~/src/xrt/games.xrt ~/src/conf/games.ini ~/src/pack/monkeys.xrt ~/src/e344/games.moo ~/src/e344/monkeys.moo ~/src/en-us/monkeys.ini
Ce serait un enfer de dire find
quoi faire dans ce cas.
Mieux utiliser la coquille:
for i in **/*.{xrt,ini,moo}; do FILE=$(basename "$i") DIR=~/dst/${FILE%.*} echo mkdir -p -- "$DIR" echo mv -i -t "$DIR" -- "$i" done
Utilisez shopt -s globstar
pour faire le **
glob travail (ou utilisez zsh!). Et supprimez l' echo
plus tard si la command imprime ce que vous voulez.
sortingcher find command line:
find source -name "*.xrt,*.ini,*.moo" -exec env file={} bash -c 'base="$(basename "$file")";dir="dst/${base%.*}";mkdir -p "$dir";cp "$file" "$dir"' \;
en fait un travail pour appeler le script bash dans find LOL.
= P