Ich habe 220 Verzeichnisse, jedes mit 2 Dateien darin. Alle Dateien haben die gleiche Endung (*.fq.gz). Ich möchte alle diese Dateien in ein einziges Verzeichnis verschieben.
Ich denke, ich könnte das mit einer Shell-Schleife machen, aber ich habe keine Ahnung, wie das geht ...
Antwort1
Das ist etwas, das ich benutze, wenn ich nicht besonders vorsichtig sein muss
mkdir unique_dir && mv */*.fq.gz unique_dir/
Sofern ich nichts übersehen habe.
Antwort2
Sie haben Recht. Sie können diese Aufgabe mit zwei For-Schleifen erledigen. Eine innerhalb der anderen. Wir werden ein Bash-Skript erstellen, das genau das tut. Sehen wir uns an, wie es aussehen würde:
#!/bin/bash
for dir in */; do
echo "$dir"
cd "$dir"
for file in *; do
echo "moving $file"
mv $file ~/targetdir
done
cd ..
done
Wenn Sie ein schnelleres Skript haben möchten, entfernen Sie einfach das Echo aus dem Skript. Ich habe dies gemacht, um die Verfolgung des Fortschritts zu vereinfachen.
Erstellen Sie einfach eine Datei und kopieren Sie diese Befehle hinein. Geben Sie ihr anschließend die Ausführungsberechtigung chmod +x scriptfile
und führen Sie sie ./scriptfile
im Hauptverzeichnis aus, in dem sich die anderen Verzeichnisse befinden. Vergessen Sie nicht, targetdir und scriptfile durch Ihr Zielverzeichnis und den Namen der Skriptdatei zu ersetzen.
Wenn Ihre Verzeichnisse mehrere Dateien enthalten, ersetzen Sie sie in der Schleife einfach *
durch , und es werden nur Ihre beiden Dateien durchlaufen.*.fq.gz
for file
Achtung!!! Erstellen Sie Ihr Zielverzeichnis nicht im Hauptverzeichnis, da es auch darin iteriert.
Bearbeiten: Wie @steeldriver vorgeschlagen hat, könnten Sie for dir
Befehle entfernen und einfach for file
Befehle verwenden */*.fq.gz
, um eine schnellere Schleife zu erhalten. Ich habe beschlossen, sie beizubehalten, um besser verfolgen zu können, was in Verzeichnissen vor sich geht.
Bearbeiten: Während ich auf Manpages und Webseiten zu den von @waltinator beantworteten Find- und Xarg-Befehlen recherchierte, fand ich, dass es bequemer, schneller und sicherer ist. Ich habe sogar eine Alternative zu Xarg gefunden, indem ich die Option -exec des Find-Befehls verwende, wie z . B. find . -type f -name '*.fq.gz' -exec mv --backup=numbered --target-directory=$dest {} \;
.
Antwort3
Wenn Sie mit vielen Dateien oder Dateien mit komischen Namen arbeiten, sind find
dies xargs
die zu verwendenden Tools. Lesen Sie man find;man xargs
und führen Sie etwas aus wie:
dest=../destination # must be outside this directory tree
mkdir $dest
find . -type f -name '*.fq.gz' -print0 |\
xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest
Wenn Sie mit den Ergebnissen zufrieden sind, ersetzen Sie " echo mv
" durch einfach " mv
".
$dest
Um die Schwierigkeit „ist im aktuellen Verzeichnis“ auszuschließen , verwenden Sie --prune
:
find . -type d -name "$dest" -prune -o -type f -name '*.fq.gz' -print0 |\
xargs -0 --no-run-if-empty echo mv --backup=numbered --target-directory=$dest
Antwort4
krusader can search files and save to a custom tab then you can select all of those (or filter the list) and move them to the destination
sudo apt install krusader
Sie können auch hinzufügen
sudo apt install krename
Gehen Sie zum obersten Quellverzeichnis, zu den Tools, zur Suche oder mit Strg+S. Klicken Sie auf Feed, um die Listbox zu bearbeiten. Wählen Sie alle Dateien aus und kopieren Sie sie in ein anderes Fenster oder drücken Sie F5. Das andere Fenster ist die andere Registerkarte, die das Quellziel ist.