
Bearbeiten und Ändern des Wortlauts, um ihn klarer zu machen - Ich habe .dm4-Dateien in dirA und dirB. Mein Referenzordner ist dirA und ich möchte alle .dm4-Dateien auflisten, die in dirA fehlen und in dirB vorhanden sind und dann alle fehlenden .dm4s zusammen mit den vorhandenen .dm4s von dir A in Verzeichnis C posten, um sicherzustellen, dass ich keine .dm4s übersehe, die in meinem dirA und dirB vorhanden sein könnten.
Antwort1
Lassen Sie uns einige Annahmen festlegen:
- Ihre Schale ist
bash
- DeinVerzeichnis AIst
dirA
- DeinVerzeichnis BIst
dirB
- DeinVerzeichnis Cexistiert noch nicht, wird aber benannt
dirC
- Alle Dateien, die Sie interessieren, existieren in diesen Verzeichnissen oder sind möglicherweise
dirA
dupliziertdirB
Der einfachste Weg, der mir einfällt, ist folgender:
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
Dadurch werden alle .dm4-Dateien in die beiden Verzeichnisse eingefügt und eine Liste der beiden Verzeichnisse dirC
erstellt .diff
Wenn Sie einen höheren Detaillierungsgrad benötigen, bitteBearbeiten Sie Ihre Frageum genauer zu sein.
AKTUALISIEREN:
Angenommen, Sie haben diese Dateien:
$ ls -1 dir{A,B}/*
dirA/apple.dm4
dirA/banana.dm4
dirA/date.dm4
dirA/fig.dm4
dirB/apple.dm4
dirB/elderberry.dm4
dirB/fig.dm4
dirB/grape.dm4
dirB/huckleberry.dm4
Beachten Sie, dass einige Dateien dupliziert sind, einige nur in dirA
, einige nur in dirB
. Keines der Verzeichnisse hat eine cherry.dm4
Datei, was auch immer das bedeutet.
Und nehmen wir außerdem an, Sie haben ein Skript foo.sh:
$ cat << EOF > foo.sh; chmod 755 foo.sh
#!/usr/bin/env bash
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
EOF
Beim Laufen foo.sh
entstehen:
$ ./foo.sh
2,3c2
< banana.dm4
< date.dm4
---
> elderberry.dm4
4a4,5
> grape.dm4
> huckleberry.dm4
$ ls -1 dirC/*
dirC/apple.dm4
dirC/banana.dm4
dirC/date.dm4
dirC/elderberry.dm4
dirC/fig.dm4
dirC/grape.dm4
dirC/huckleberry.dm4
Die diff
Ausgabe zeigt, dass die .dm4-Dateien in , , und fehlen dirA
. elderberry
Alle grape
Dateien huckleberry
indirA
oder dirB
sind in vorhanden dirC
.
Antwort2
Alle Dateien von dirA nach dirC kopieren
cp dirA/*.dm4 dirC
Kopieren Sie dann alle Dateien aus Verzeichnis B und überspringen Sie vorhandene Dateien in Verzeichnis C.
cp -n dirB/*.dm4 dirC/
Manpage für cp
:
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
Hinweis: -n
Es werden nur Dateinamen geprüft. Um Versionen zu prüfen, -u
könnte die Option „pdate“ interessant sein.