staging.inyokaproject.org

Suchparameter mit cat

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Mondviech

Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Ich habe in einem Übungsbuch folgende Aufgaben gefunden:

Wie können Sie sich alle Dateien in Ihrem Arbeitsverzeichnis anzeigen lassen, die mit einer Ziffer enden?

Diese Aufgabe war leicht ich hab sie folgendermaßen gelöst:

cat *[0-9]

Die anderen 3. Aufgaben bereiten mir aber Kopfzerbrechen. Hat Jemand eine Idee?

Wie können Sie sich alle Dateien auf dem Bildschirm ausgeben lassen, die mindestens eine Ziffer enthalten und nicht mit einer Ziffer enden?

Die hier hab ich inzwischen auch gelöst:

cat *[0-9][!0-9]

Wie können Sie sich alle Dateien im Arbeitsverzeichnis anzeigen lassen, deren Namen aus genau drei Zeichen bestehen?

Hat ich folgendermaßen gelöst:

cat ???

Wie können Sie sich alle Dateien im Arbeitsverzeichnis anzeigen lassen, die mit einem kleinen Buchstaben anfangen, irgendwo einen Punkt enthalten und mit einem großen Buchstaben enden?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Ich glaube du willst dich mit Pattern-Matching (https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) und regulären Ausdrücken für POSIX beschäftigen: https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions.

ls *[[:digit:]]*[^[:digit:]]
ls ???
ls [[:lower:]]*.*[[:upper:]] 

Mondviech

(Themenstarter)
Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Danke für die Antwort. Naja in dem Buch was ich lese geht es um Bash und Python. +

Informatik: Eine praktische Einführung mit Bash und Python (De Gruyter Studium)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Mondviech schrieb:

Wie können Sie sich alle Dateien in Ihrem Arbeitsverzeichnis anzeigen lassen, die mit einer Ziffer enden?

Diese Aufgabe war leicht ich hab sie folgendermaßen gelöst:

cat *[0-9]

Das zeigt die Inhalte der Dateien an. Bei der Fragestellung hätte ich eher darauf getippt, dass die Namen gewünscht sind. Dafür würde man einen anderen Befehl nutzen als cat (mir fallen spontan drei andere ein 😉).

Ansonsten, was seahawk1986 gesagt hat.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Mondviech schrieb:

Danke für die Antwort. Naja in dem Buch was ich lese geht es um Bash und Python. +

Informatik: Eine praktische Einführung mit Bash und Python (De Gruyter Studium)

Dann steht das meiste ja schon auf der Seite mit den Übungen... - ich finde es aber schwach, dass da die POSIX-Zeichenklassen unterschlagen werden.

vi(m), die Bash und Python sind ziemlich gut dokumentiert, da hat man oft mehr davon, wenn man gleich mit dem Material arbeitet, in dem man später sowieso Dinge Nachschlagen wird ☺

Mondviech

(Themenstarter)
Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Danke für die Antwort.

Ich habe noch eine Frage:

Ich habe die Datekein kap1.txt bis kap6.txt.

Kann ich mehrere Dateien umbenennen, also eine einzelne Datei umzubenennen ist einfach:

Da gebe ich z.B. ein mv kap02.txt Kapitel2.txt

Aber bei mehrere Dateien passiert folgendes:

1
2
~/Dokumente/test/neuerordner$ mv kap*.txt Kapitel*.txt
mv: das angegebene Ziel 'Kapitel2.txt' ist kein Verzeichnis

Gibt es eine Möglichkeit das mit mv zu Bewerkstelligen?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Nicht ohne Hilfskonstrukte.

1
2
3
for file in kap*.txt; do
    mv "$file" "Kapitel${file//kap}"
done

Man könnte für komplexere Umbenennungsaktionen auch Tools wie mmv nutzen.

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

1
man rename

Mondviech

(Themenstarter)
Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Danke für eure Antworten, hat Jemand eine Idee wie ich folgende Aufgabe lösen könnte?

Sie wollen, dass zusätzlich zu den in der PATH -Variablen angegebenen Pfaden immer auch im aktuellen Arbeitsverzeichnis nach ausführbaren Dateien gesucht wird. Geben Sie ein entsprechendes Unix-Kommando an, das dies ermöglicht.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Mondviech: Ja. ☺

Mondviech

(Themenstarter)
Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Wärst du so nett und könntest mir es sagen. Ich durchsuche schon Ewigkeiten das Netz und finde nicht wirklich etwas:

1
:~/Downloads$ echo $PATH | find -type f

Also das hier zeigt alle Dateien an, gibt es einen Befehl der nur ausführbare Dateien anzeigt?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Mondviech schrieb:

Ich durchsuche schon Ewigkeiten das Netz und finde nicht wirklich etwas

Im Zweifelsfall die Manpage bzw. das Handbuch lesen ☺

-executable
Matches files which are executable and directories which are searchable (in a file name resolution sense). This takes into account access control lists and other permissions artefacts which the -perm test ignores. This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server. Because this test is based only on the result of the access(2) system call, there is no guarantee that a file for which this test succeeds can actually be executed.

Also z.B. um die ausführbaren Dateien im aktuellen Arbeitsverzeichnis und den Unververzeichnissen zu bekommen:

find . -type f -executable 

Wenn es aber nur darum geht das aktuelle Verzeichnis in den PATH zu bekommen, genügt es die Variable zu erweitern:

export PATH+=":$(pwd)" 

Mondviech

(Themenstarter)
Avatar von Mondviech

Anmeldungsdatum:
25. Juli 2015

Beiträge: Zähle...

Danke für die Antworten. Ich habe noch eine Frage:

Ich möchte alle .c Dateien im home ordner in das Verzeichnis backupC in meinem Dokumenteordner kopieren, und gleichzeit noch die Endung .c durch die Endund .bak ersetzen.

1
2
3
4
5


mondi@mondi-MS-7996:~/Dokumente$ find . ~/ -name '*.c' -type f -exec cp {} /home/mondi/Dokumente/backupC2 \;

mondi@mondi-MS-7996:~/Dokumente/backupC2$ rename 's/\.c$/.bak/' *.c

Habs jetzt mit den beiden Befehlen hinbekommen, muss man doch irgendwie verknpüfen können.

rafi

Avatar von rafi

Anmeldungsdatum:
7. Februar 2006

Beiträge: 1050

ist doch ok dass das zwei Befehle sind,

Der erste geht kürzer mit

1
mv ~/*.c /home/mondi/Dokumente/backupC2

An welcher FH lernt man den Bash?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@rafi: Das ist nicht äquivalent. Dein mv kopiert nur die Dateien (und Verzeichnisse!), welche direkt im Heimatverzeichnis liegen, das find sucht nur Dateien und keine Verzeichnisse, dafür aber auch in allen Unterverzeichnissen. Kommt halt darauf an was der OP eigentlich will/soll. ☺

Antworten |