Kopieren Sie die vom Befehl „find“ aufgelisteten Dateien und benennen Sie sie mit dem Pfad

Kopieren Sie die vom Befehl „find“ aufgelisteten Dateien und benennen Sie sie mit dem Pfad

Ich mache eine Kopie findaller Dateien mit einer bestimmten Erweiterung und kopiere sie dann in einen bestimmten Ordner, aber die meisten davon werden überschrieben, weil sie den gleichen Namen haben. Wie kann ich mit einem Linux-Befehl den Pfad der Datei ermitteln und ihn durch den Dateinamen ersetzen?

Im Moment verwende ich diesen Befehl:

find . -name "*.css" | xargs cp -t /folder/AllCssFiles/

Wenn ich also zwei Dateien auf einem bestimmten Pfad habe, wie diesen:

/something/abc/file.css
/anyting/xyz/file.css

Wenn ich den Befehl verwende, sollte ich im Ordner „AllCssFiles“ etwa Folgendes erhalten:

  /something/abc/file.css   (name of the file)
  /anyting/xyz/file.css

Antwort1

Sie können -execdirund den Befehl rename1 verwenden .

find ./ -type f -name "*.css" -execdir rename -v "s/search/replace/" {} \;

Wenn Sie nicht sicher sind, können Sie renamemit verwenden-n

  -n, -nono
           No action: print names of files to be renamed, but don't rename.

1 Dies ist die Syntax, für die in einigen Debian-basierten Systemen und in anderen perl-renameaufgerufen wird .renameprenameperl-rename

verwandte Informationen