ln -s meldet, dass ein Vorgang fehlgeschlagen ist, erstellt aber trotzdem symbolische Links

ln -s meldet, dass ein Vorgang fehlgeschlagen ist, erstellt aber trotzdem symbolische Links

Ich befinde mich im übergeordneten Verzeichnis und dort befinden sich in verschiedenen Unterverzeichnissen mehrere Dateien mit den Erweiterungen .fastq, .fq, .fastq.gz und .fq.gz. Ich habe ein Unterverzeichnis mit dem Namen FASTQC erstellt und möchte symbolische Links zu allen Dateien in diesem Unterverzeichnis erstellen.

Wenn ich es versuche:

find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q -o -name *.f*q.gz \) -exec ln -sv {} "$PWD/FASTQC" \;

Ich erhalte symbolische Links zu allen meinen Dateien in FASTQC, aber auch die folgenden Fehlermeldungen:

ln: failed to create symbolic link '/XXX/YYY/ZZZ/aaa.fastq.gz': File exists

Wenn ich stattdessen die folgenden beiden Befehle ausführe, werden alle symbolischen Links ohne Fehlermeldungen erstellt.

find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q  \) -exec ln -sv {} "$PWD/FASTQC" \;
find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q.gz \) -exec ln -sv {} "$PWD/FASTQC" \;

Warum erhalte ich beim ersten Befehl Fehlermeldungen?

BEARBEITEN: Falls jemand diese Frage später über Google findet, hier die endgültige Arbeitsversion (danke ilkkachuund steeldriver):

find "$PWD" ! -path "$PWD/FASTQC" -type f \( -name "*.f*q" -o -name "*.f*q.gz" \) \
    -exec ln -sv {} "$PWD/FASTQC" \;

Antwort1

( ! -path "..." -type f -name ... -o -name ...gz ) -exec ...

wird analysiert als

( ( ! -path "..." -type f -name ... ) -o ( -name ...gz ) ) -exec ...

weil (das implizierte)Undbindet stärker alsoder. Sie möchten wahrscheinlich

! -path "..." -type f ( -name ... -o -name ...gz ) -exec

um den ! -path(und -type) Filter *.gzauch auf Dateien anzuwenden. Das Finale -execist auch Teil des impliziertenUndKette, daher müssen die Aktionen, außer dem Paar mit -odazwischen, nicht in Klammern gesetzt werden.

Mit Ihrem vollständigen Ausdruck:

find "$PWD" ! -path "$PWD/FASTQC" -type f \( -name *.f*q -o -name *.f*q.gz \) \
    -exec ln -sv {} "$PWD/FASTQC" \;

verwandte Informationen