Einzelbefehlslösungen
Unter vielen Optionen, einschließlich Schleifen, die cpund verwenden sleep, könnten wir uns für findzwei -execFlags entscheiden, um genau diese Befehle auszuführen.
find ~/dir_1/ -type f -maxdepth 1 -exec cp {} ~/dir_2 \; -exec sleep 1 \;
Hier sind die Optionen:
~/dir_1, das Ursprungsverzeichnis, über das findfunktioniert.
-type f Holen Sie sich nur Dateien
-maxdepth 1im Verzeichnisbaum maximal 1 Ebene nach unten absteigen; verhindert das Absteigen in Unterverzeichnisse
-exec cp {} ~/dir_2 \;Kopieren Sie die aktuell verarbeitete Datei, die durch den {}Parameter festgelegt wurde, nach ~/dir_2. Das \;bezeichnet cpdie Verarbeitung einer einzelnen Datei gleichzeitig, anstatt so viele Dateien wie möglich in die Datei zu stecken {}. Der Backslash-In \;ist erforderlich, um zu verhindern, dass die Shell diesen als Befehlsabschluss falsch interpretiert.
exec sleep 1 \;wird für sleep 1jede aktuelle Datei ausgeführt.
Wenn Sie eine Liste von Dateien in einer Datei haben, können Sie Folgendes tun:
xargs -I % --arg-file=input.txt sh -c 'cp % ~/dir_2/ ;sleep 1'
Optionen hier sind:
-I % bezeichnet das Symbol, das sich auf die Datei innerhalb des Befehls bezieht
--arg-file=input.txt Lesen Sie die zu befehlenden Argumente aus einer bestimmten Datei
sh -c 'cp % ~/dir_2/ ;sleep 1'/bin/shmit bereitgestellten Befehlen per -c '...'Flag ausführen ; %wird durch Dateinamen ersetzt.
Schleifenlösungen
Sie könnten zum Beispiel eine for-Schleife verwenden
for f in "/path/to/folder_1"/*; do
cp "$f" "/path/to/folder_2/"
sleep 1
done
Aus Gründen der Übersichtlichkeit ist dies in mehreren Zeilen formatiert, dies funktioniert jedoch genauso gut als einzelne Zeile. Sie können dies auch in eine Funktion verwandeln:
delaycp(){
for f in "$1"/*; do
cp "$f" "$2"/
sleep 1
done
}
Und benutze es als
delaycp "/path/to/folder1" "/path/to/folder2"
Wenn Sie alternativ nur bestimmte Dateien kopieren möchten, nicht alles, was *Glob im Verzeichnis erfasst, können Sie auch die Pfadnamenerweiterung verwenden, etwa eine file{1..25}oder eine Eingabetextdatei wie diese input.txt:
/path/to/folder_1/file1
/path/to/folder_1/file2
/path/to/folder_1/file3
Und von dort aus nutzen Sie die while IFS= read -r lineStruktur, um die Datei zu lesen:
while IFS= read -r line || [ -n "$line" ]; do
cp "$line" "/path/to/folder_2/${line##*/}"
sleep 1
done < input.txt
whileSchleife tun?