Jak mam skopiować (styl archiwizacji, w którym data nie jest zmieniana) wszystkie pliki z katalogu kopii zapasowej do katalogu użytkownika podczas zmiany nazwy każdego pliku, aby usunąć losową część ciągu z nazwy (tj. -2b0fd460_1426b77b1ee_-7b8e)?
cp z:
/backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf
do:
/home/user/data/Erp.2014.02.16_16.57.03.etf
Każdy plik zawsze zaczyna się od „Erp”. po którym następuje ciąg znacznika daty i godziny, po którym następuje ciąg losowy, a następnie rozszerzenie „.etf”. Chcę zachować wszystkie elementy nazwy, w tym znacznik daty i godziny. Chcę tylko usunąć losowy ciąg.
Losowy ciąg umożliwia wielokrotne tworzenie kopii zapasowych tego samego pliku. Jednak w tym przypadku właśnie uruchomiłem fdupes i nie ma duplikatów. Więc mogę po prostu przywrócić wszystkie pliki, usuwając losowy ciąg.
Szukam komendy bash w jednym wierszu, aby to zrobić.
Jeśli to nie zadziała, mógłbym to zrobić w dwóch lub więcej krokach. Zwykle używam KRename, ale w tym przypadku muszę to zrobić w bash. (Pracuję zdalnie.)
pax
. To wygląda na bardzo przydatne narzędzie. Zastanawiam się, dlaczego nie jest standardem w większej liczbie dystrybucji ...pax
znajduje się w Linuksowej Standardowej Bazie od 2005 roku. Dodatkowo, GNUcpio
jest alternatywą dla tego, być może najmniej funkcjonalnym narzędziem GNU na rynku.rename
w Fedorze / Red Hat jest inaczej: nie wiem, jak go użyć w tym przypadku.Możesz użyć
cp
polecenia z-a
opcjąA następnie użyj pętli for, aby zmienić nazwę wszystkich plików podczas kopiowania:
Gotowy. Uruchom to polecenie w katalogu źródłowym.
Objaśnienie:
%%-*
odetnie wszystkie znaki po pierwszym występowania myślnikiem / minus-
, a.etf
na koniec znowu dodaje rozszerzenie pliku.Cóż, i jako jedna wkładka, umieść to wszystko w jednej linii. :-) Lubię to
źródło
%%-*
napiwku? Jestem ciekawy.W Zsh użyj
zmv
. Umieść to w.zshrc
:Następnie użyj
W bash:
Jeśli nie masz zsh, sposób POSIX używa pax (kopiuje katalogi rekurencyjnie).
Jeśli korzystasz z systemu z ograniczeniami bez Zsh i Pax, możesz użyć pętli:
źródło
cp
nie ma takiej możliwości. Pamiętam,cpio
że mogłem to zrobić, ale obecna strona podręcznika mówi inaczej. Jednak (gnu)tar
ma--transform
opcję:Więc miałbyś cmdline jak:
źródło