ubuntuusers.de

Find - Vorhandene Dateien verschieben problem

Status: Ungelöst | Ubuntu-Version: Ubuntu Budgie 22.04 (Jammy Jellyfish)
Antworten |

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13131

Du müsstest dann selber so etwas wie Globbing machen, z.B. mit regulären Ausdrücken und Word Boundaries ("\<" und "\>").

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/sh

[ $# -gt 0 ] || set -- wichtig haus finanzen

for operand; do 
   mkdir -p "$operand"
 
   for file in *; do
     if expr "$file" : '.*\<'"${operand}"'\>' >/dev/null; then
       [ -f "$file" ] && mv "$file" "$operand"
     fi
   done
done

Ungetestet.

karzer Team-Icon

Wikiteam
Avatar von karzer

Anmeldungsdatum:
10. April 2022

Beiträge: 1497

Wohnort: Bad Oeynhausen

Hallo,

vielleicht wäre es sinnvoll, die Dateinamen so anzulegen, das das Stichwort gut zu erkenennen ist, zum Beispiel:

dateiname-haus-dateiname.txt

Dann könnte man die Expression darauf ansetzen.

Wäre das zu viel Arbeit?

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Hi, ich experimentiere damit mal rum und melde mich. Zurzeit unterwegs, wird wohl erst zum Wochenende.

Danke und Gruß!!

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

rklm schrieb:

for file in *; do if expr "$file" : '.*\<'"${operand}"'\>' >/dev/null; then [ -f "$file" ] && mv "$file" "$operand" fi done

Das scheint gut zu funktionieren. Was nun nicht mehr geht ist 'shopt -s nocaseglob'. Jetzt unterscheidet er wieder zwischen Groß/Kleinschrift...

👍

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

karzer schrieb:

vielleicht wäre es sinnvoll, die Dateinamen so anzulegen, das das Stichwort gut zu erkenennen ist, zum Beispiel:

dateiname-haus-dateiname.txt

Dann könnte man die Expression darauf ansetzen.

Ja das kann ich zu 80% nicht beeinflussen. Das wäre zuviel Arbeit, dann kann ich die wie gehabt gleich manuell vorsortieren. Wenn alles in die Hose geht, das Script ist jetzt schon richtig gut. Mal sehen ob @rklm noch einen Geistesblitz hat, denn an seinem Zusatz funktioniert wie beschrieben nur der shopt Befehl nicht mehr.

Danke und Gruß!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13131

DPoi schrieb:

rklm schrieb:

for file in *; do if expr "$file" : '.*\<'"${operand}"'\>' >/dev/null; then [ -f "$file" ] && mv "$file" "$operand" fi done

Das scheint gut zu funktionieren. Was nun nicht mehr geht ist 'shopt -s nocaseglob'. Jetzt unterscheidet er wieder zwischen Groß/Kleinschrift...

Mit expr ist das nicht anders zu haben. Dann ginge noch so etwas:

1
2
3
4
# statt
if expr "$file" : '.*\<'"${operand}"'\>' >/dev/null; then
# dies
if echo -n "$file" | egrep -iq '.*\<'"${operand}"'\>'; then

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

rklm schrieb:

# dies if echo -n "$file" | egrep -iq '.*\<'"${operand}"'\>'; then

...das haut hin! 😎 👍 Jetzt sieht es sehr gut aus. Dieses script erleichtert mir die Arbeit ENORM! Alles soweit vorsortiert und ich kann nach Dringlichkeit abarbeiten.

Daaaaaaaaaaaaaaanke!!

Klar ist, das ich hier noch sehr viel zu lernen habe. Obwohl ich diese Art script-programmierung nicht oft beanspruche. Also bleibt nicht viel hängen. Ich notiere mir aber immer alles in mein el. Notizbuch und kann dann diese Hilfen immer wieder abrufen!

Jetzt bin ich sehr zufrieden.

Gruß!!

DPoi

(Themenstarter)
Avatar von DPoi

Anmeldungsdatum:
6. Januar 2015

Beiträge: 356

Ich möchte dieses Thema noch einmal aufwecken...

Das Script funktioniert sehr gut und erledigt seine Arbeit schon prima. Da meine Bedürfnisse aber gewachsen sind und nun viele Verzeichnisse zu bearbeiten sind, hätte ich folgende Frage zu diesem Script.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#! /bin/bash
#
# Logging aktivieren
#
log=log_file.txt

# Erst die Bezeichnungen und fehlerhaften Zeichen aus Dateiname entfernen/ersetzen
#
#/usr/bin/videos-sortieren_test_and_copy.sh;
/usr/bin/videos-rename.sh ;

# Verzeichnisse erstellen
#

shopt -s nocaseglob

[ $# -gt 0 ] || set -e --  'bezeichnung 1' 'bezeichnung 2' 'bezeichnung 3' 'bezeichnung 4' bezeichnung5 bezeichnung6 bezeichnung7 bezeichnung8

for operand; do
   mkdir -p "$operand"

 for file in *; do
     if echo -n "$file" | egrep -iq '.*\<'"${operand}"'\>'; then
       [ -f "$file" ] && mv "$file" "$operand"
     fi
   done

done

find . -type d -empty -delete;

# Nachricht auf Desktop ausgeben
#
gmessage -nearmouse -geometry 500x100 -fg red -timeout 20 -name 'Videos verschieben' "Umbenennen und verschieben der Videos erledigt!"

Der Ablauf ist folgender:

  1. Nicht passende Dateinamen umgenennen (seperates script)

  2. Verzeichnisse nach Vorgabe erstellen

  3. Dateien identifizieren und in Verzeichnisse verschieben

  4. Leere Verzeichnisse löschen

Da nun sehr viele Verzeichnisse unnötig erstellt werden, die ich am Ende wieder löschen lasse, wäre es doch sinnvoll, wenn das Verzeichnis erst dann erstellt wird, wenn eine Datei mit der entsprechenden Variable vorhanden ist.

Ich habe mich selbst versucht und bin richtig gescheitert! Hmm. Ich bekomme das script so wie ich möchte nicht hergestellt...

Habt Ihr eine Idee wie ich das sinnvoll realiesieren kann oder soll?

Besten Dank und Gruß!

Antworten |