Führen Sie eine For-Schleife für mehrere Ordner aus

Führen Sie eine For-Schleife für mehrere Ordner aus

Ich habe mit mehreren Ordnern gearbeitet. Jeder Ordner hat einen eindeutigen Namen und enthält mehrere CSV-Dateien. Ich habe ein Bash-Skript, das für jede CSV-Datei im Ordner einen Ordner mit dem Namen der Datei erstellt und N Kopien der Dateien im neuen Ordner anfertigt. Im ursprünglichen Bash-Skript kann ich den spezifischen Ordner angeben, in dem es ausgeführt wird.

Aber jetzt habe ich hunderte Ordner und versuche, dieses Skript zu automatisieren, aber es funktioniert nicht richtig

#cd grupo_2_pareja_D-H
#cd grupo_2_single_D-H
#cd grupo_2_tercia_CDH
for d in ./*; do
    echo "$d"
    for x in ./* .csv; do
        mkdir "${x%.*}" 
        for ((i=1;i<=10;i++)); do # Create a loop, looping N times
        cp "$x" "${x%.*}/"${x%.*}"_$i.csv" # use i in the copy command
        #rm -f "$x" # Remove the file after the N copies
        done
    done  
done

Ich brauche Hilfe, um dies zu ermöglichen, danke im Voraus. Grüße

Antwort1

Warum nicht verwenden find? Ich glaube nicht, dass mein Skript schneller sein wird, aber es funktioniert irgendwie. -execdirBenötige GNU Find, aber mit ein paar Optimierungen -execkönnte POSIX Find auch funktionieren.

#!/bin/sh
find "$@" -type f -name '*.csv' -execdir sh -c 'name="${1%.csv}"; mkdir -- "$name"; for i in $(seq 10); do cp -- "$1" "$name/${name}_$i.csv" & done' shell '{}' \;

verwandte Informationen