Führen Sie einen Befehl mit Parametern für jeden Dateinamen in einem Ordner aus

917
ddmichael

Ich möchte einen Befehl ausführen, nennen wir ihn abc und fügen Sie jeden Dateinamen im aktuellen Ordner als Parameter hinzu. Wie kann ich dies in der C-Shell (oder einer anderen Skriptsprache) tun?

0
Vielleicht kannst du einfach "abc *" machen? Wenn nicht, erklären Sie genauer, was Sie wollen. Daniel Andersson vor 11 Jahren 0

2 Antworten auf die Frage

1
Nicole Hamilton

Using csh or tcsh, this would iterate over all the files and directories in the current directory. I've used quotes around the $i variable substitution in case some of the names have spaces.

foreach i (*) abc "$i" end 

If you'd like to get only the files, not the directories, use the -f test. Here I've used the C shell's short-form if statement.

foreach i (*) if (-f "$i") abc "$i" end 
0
kmort

Look up xargs. If your shell is anything like mine, the following should work nicely:

find . -type f -maxdepth 1 | xargs abc 

If you are concerned about spaces in the file names, see Daniel Andersson's comment below.

Dadurch werden auch alle Dateien in Unterverzeichnissen angezeigt. Es werden auch alle Verzeichnisse angegeben, obwohl die Frage "Dateien" angibt (dies ist jedoch für den Fragesteller möglicherweise unklar). Es wird auch für jeden Dateinamen, der ein Leerzeichen enthält, ein Fehler auftreten. `finden. -maxdepth 1 -mindepth 1-typ f -print0 | xargs -0 abc` oder `find. -maxdepth 1 -mindepth 1 -type f -exec abc {} + `würde diese Punkte korrigieren. Daniel Andersson vor 11 Jahren 0
@DanielAndersson Alle gültigen Kommentare ... Ich habe meine Antwort ein wenig aktualisiert. Ich kann mich nicht erinnern, wann ich das letzte Mal ein Leerzeichen in einem Dateinamen auf einem * nix-System gesehen habe. :-) kmort vor 11 Jahren 0
@kmort Ich bin damit einverstanden, dass Dateinamen mit Leerzeichen auf einem Linux-System selten sind, aber wenn Sie eine Antwort posten, die die Möglichkeit nicht berücksichtigt (oder zumindest darauf hinweist, dass sie fehlschlägt, wenn Leerzeichen vorhanden sind), wird Ihnen hier sicherlich jemand auffallen auf der Superuser-Site. Es ist genau so, wie es hier ist. Nicole Hamilton vor 11 Jahren 0