Mam pliki pdf w formacie:
Author-YYYY-rest_of_text_seperated_by_underscores.pdf
John-2010-some_file.pdf
Smith-2009-some_other_file.pdf
Muszę zmienić nazwy plików, aby pierwszy rok był np.
YYYY-Author-rest_of_text_seperated_by_underscores.pdf
2010-John-some_file.pdf
2009-Smith-some_other_file.pdf
Oznacza to przeniesienie elementu „YYYY-” na początek.
Nie mam unixowej „Zmień nazwę” i muszę polegać na sed, awk itp. Z przyjemnością zmieniam nazwę na miejsce.
Próbowałem dostosować tę odpowiedź, nie mając wiele szczęścia. Używanie sed do masowej zmiany nazw plików
Odpowiedzi:
4 dla odpowiedzi № 1Widzieć BashFAQ # 100 ogólne porady na temat manipulacji sznurkiem za pomocą basha. Jedną z technik, do których się to odnosi, jest rozszerzenie parametrów, który jest mocno wykorzystywany w poniższych:
pat=-[0-9][0-9][0-9][0-9]-
for f in *$pat*; do # expansion not quoted here to expand the glob
prefix=${f%%$pat*} # strip first instance of the pattern and everything after -> prefix
suffix=${f#*$pat} # strip first instance and everything before -> suffix
year=${f#"$prefix"}; year=${year%"$suffix"} # find the matched year itself
mv -- "$f" "${year}-${prefix}-${suffix}" # ...and move.
done
Tak poza tym, BashFAQ # 30 omawia wiele mechanizmów zmiany nazw, w tym jeden używający sed
uruchomić dowolne transformacje.
3 dla odpowiedzi № 2
Używanie wyrażenia regularnego BASH:
re="^([^-]+-)([0-9]{4}-)(.*)$"
for f in *.pdf; do
[[ $f =~ $re ]] &&
echo mv "$f" "${BASH_REMATCH[2]}${BASH_REMATCH[1]}${BASH_REMATCH[3]}"
done
Kiedy jesteś zadowolony z wyjścia echo
polecenie przed mv
.