/ / Problemy z skryptem zmiany nazwy Bash - bash, macos, terminal, zmień nazwę

Problemy z skryptem zmiany nazwy Bash - bash, macos, terminal, zmień nazwę

Mam bardzo prosty skrypt bash, że jestemdziała w Terminalu OSX. Przeznaczony jest do zmiany nazw plików przy użyciu określonych ścieżek plików. Kiedyś działało dobrze kilka miesięcy temu, ale ostatnio zdarzają się różne szalone rzeczy i nie mam pojęcia dlaczego.

Oto kod:

mv() { command mv "$@"; sleep 1; }
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyleA.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standardA.tif

Uruchomiłem go zi bez pierwszej linii. Dodałem opóźnienie snu, ponieważ podejrzewałem, że przyczyną problemów jest zbyt agresywny dział IT zakłócający działanie terminala, co w dalszym ciągu może się zdarzyć, ale tak czy inaczej skrypt nie działa.

Oto, co zwraca Terminal po uruchomieniu:

mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nvest/1140122_alternate3A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nTest/1140122_alternate4A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Renmv -nv /Volume22_lifestyleA.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standardA.tifç^C^C^C^C^C

Jak widać, powoduje to prawdziwy bałagan w plikuzmieniając nazwy, a także ścieżki plików, które nawet się nie zmieniają. Dosłownie dodajemy literę A między końcem nazwy pliku a rozszerzeniem pliku.

Czy ktoś widzi tu coś, co mogłoby byćpowodując to? Nasz dział informatyczny zaczął ostatnio używać bramki sieciowej o nazwie WebSense do monitorowania aktywności firmy, czy to możliwe, że powoduje problemy?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie powiedziałeś nam (jeszcze) w jaki sposób powołujesz się na swój scenariusz.

Jeśli Twój skrypt nadal był rozpoznawany jako plik wykonywalny, nie wytworzy wynik, który określisz - nie byłby po prostu Echo Twój skrypt, bez względu na dodatkowe znaki.

  • Jeśli wywołasz skrypt bezpośrednio:

    • Czy masz skrypt? linia shebang, jak w scenariuszu poniżej?
    • Czy został oznaczony jako plik wykonywalny, z chmod +x <file>?
  • W przeciwnym razie: do jakiego pliku wykonywalnego przekazujesz go?

  • Czy Twój skrypt zawiera nieoczekiwane znaki, które wyświetlają się z prefiksem ^ (Jak na przykład ^M dla CR (r) znaki.) lub M- jeśli biegniesz LC_ALL=C cat -et <file>, tak jak Jonathan Leffler wskazuje?

  • Jak Jonathan sugeruje dalej: czy może powołujesz się na swoje skrypt jako całość z sh -nv <file> lub bash -nv <file>, co przynajmniej wytłumaczyłoby, dlaczego kod źródłowy jest drukowane (-v) bez wykonywania scenariusz (-n), chociaż nie tłumaczy to niespodziewanych znaków końcowych.

W międzyczasie, tutaj jest przeformułowanie twojego scenariusza w duchu SUCHY:

#!/bin/bash

pathPrefix="/Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122"

files=(
"${pathPrefix}_alternate1.tif"
"${pathPrefix}_alternate2.tif"
"${pathPrefix}_alternate3.tif"
"${pathPrefix}_alternate4.tif"
"${pathPrefix}_lifestyle.tif"
"${pathPrefix}_standard.tif"
)

for file in "${files[@]}"; do
mv -nv "$file" "${file%.tif}a.tif"
done