Komunikat o błędzie mówi ci, że nie można przenieść katalogu zasobów, ponieważ są w nim pliki. mv katalog oznacza wykonanie kopii, a następnie skasowanie i nie można go usunąć, ponieważ nadal zawiera niektóre pliki. Oznacza to, że powinieneś również zapisać pliki wewnątrz zasobu, a nawet podkatalogi i pliki w podkatalogach w zasobie, jeśli istnieją. Ale wydane polecenie mv może tylko kopiować (i wymazywać) to, co jest obecne w katalogu mv_schedule, a nie to, co jest obecne w podkatalogach (jak zasób) w mv_schedule.
To, czego chcesz, to polecenie, które obniża drzewo katalogów do ostatniego liścia i kopiuje je, coś w rodzaju opcji -r lub -R w rm, chmod, chown. Jednak mv nie ma takiej opcji, więc będziesz musiał użyć polecenia find, które zstępuje z całego drzewa katalogów od określonego katalogu głównego, a następnie wykonuje określone działanie. W twoim przypadku odpowiednie polecenie to:
SOURCE_DIR=$1
TARGET_DIR=$2
find $SOURCE_DIR -name '*' -type f -exec mv -f {} $TARGET_DIR \;
Spowoduje to spiętrzenie wszystkich plików w jednym katalogu docelowym. Zakłada się, że przekazałeś katalog źródłowy i docelowy jako parametry wiersza wejściowego do skryptu bash. Opcja -f zapobiega pytaniu o potwierdzenie w przypadku zastąpienia, możesz zmienić to na -n (nie zastępuj) lub -i (pytaj przed zastąpieniem).
Jeśli zamiast tego chcesz zachować strukturę katalogów, pamiętaj, że polecenie cp ma możliwość zejścia z drzewa katalogów, dzięki czemu możesz użyć tego, a następnie komendy rm, ponieważ to polecenie ma również możliwość zejścia z drzew. Jednym z możliwych zestawów poleceń jest:
SOURCE_DIR=$1
TARGET_DIR=$2
cp -a $SOURCE_DIR $TARGET_DIR
rm -rf $SOURCE_DIR
Zwróć uwagę na opcję -a w cp: zachowuje znaczniki czasu i własność. Jeśli nie przejmujesz się takimi rzeczami, możesz zamiast tego użyć opcji -R.
alias -a
/