Z góry przepraszam, jeśli udzielono na nie odpowiedzi, ale przeprowadziłem długie wyszukiwanie w nadziei na rozwiązanie.
Mam działającą aplikację Automator, która dołącza bieżącą sześciocyfrową datę (RRRMDD) na końcu nazwy pliku:
- Dane wejściowe: nazwa_pliku.txt
- Dane wyjściowe: nazwa_pliku_181212.txt
Bieżące polecenie bash:
today=$(date +%y%m%d)
for f in "$@"
do
basename=${f##*/}
filename=${basename%.*}
path=${f%/*}
ext=${f##*.}
newfilename="$filename"_"$today"
mv "$f" "$path"/"$newfilename"."$ext"
done
Jest to świetne, ale po regularnym używaniu zdałem sobie sprawę, że fajnie byłoby nie tylko dołączyć aktualną datę, ale najpierw sprawdzić, czy data jest już dołączona do nazwy pliku; jeśli tak, usuń go i dołącz aktualną datę, w przeciwnym razie po prostu dołącz aktualną datę.
Istnieją dwa scenariusze:
- Nazwa pliku zawiera dowolną datę (poprzednią / bieżącą / przyszłą) w 6-cyfrowym formacie opisanym poprzednio poprzedzonym znakiem podkreślenia (Nazwa pliku_181212.txt)
- Nazwa pliku nie zawiera dołączonego do niego 6-cyfrowego formatu daty (Filename.txt)
Zdaję sobie sprawę, że rozwiązanie, na które mam nadzieję, usunie wszelkie sześć cyfr i poprzedzające je „_”, jeśli istnieje, niezależnie od tego, czy jest to data, czy nie.
Czy jest możliwe, aby poprzedzić moje obecne polecenie bash czymś w rodzaju:
jeśli jakakolwiek kombinacja liczb istnieje bezpośrednio przed rozszerzeniem pliku („.ext”) ORAZ zawiera dokładnie 6 cyfr ORAZ jest poprzedzona znakiem podkreślenia („_”)
następnie usuń podkreślenie plus 6 cyfr ORAZ uruchom polecenie bash wymienione powyżej
jeśli nie, uruchom powyższą komendę bash
Podsumowanie Próbuję złagodzić ręczne usuwanie dat, które mogą istnieć w nazwie pliku, przed dołączeniem do nich bieżącej daty. Niektóre pliki mogą mieć daty, a inne nie.
źródło
Odpowiedzi:
Powinno to zrobić tak, jak prosiłeś:
Zauważ, że gdy używany w Run Shell Script działania w Automator workflow , może trzeba dodać pełną ścieżkę do
sed
w kodzie przewidzianym, np:/usr/bin/sed
źródło