BASH Скрипт для перемещения файлов неправильно перемещает файлы - PullRequest
0 голосов
/ 20 мая 2019

Я написал скрипт для перемещения файлов из каталога _Incoming в каталоги ../[AZ] на основе первой буквы имени файла.

Не похоже, что он работает правильновсе остальные файлы в этом каталоге перемещаются в каталог по умолчанию '../@'.

Вот сценарий, который я использую:

#!/bin/bash
echo "+-------------------------------------------------------------------+"
echo "|               Removing _ and replacing with space                 |"
echo "+-------------------------------------------------------------------+"
find /run/media/chad/New\ Volume/Chad/_Incoming/ -depth -name '*_*' |
while IFS= read -r f ; do
    mv -iv "$f" "$(dirname "$f")/$(basename "$f"|tr '_' ' ')" ;
done
### Would be nice if this didn't rename the Incoming directory.
### But, since it does...
echo "+-------------------------------------------------------------------+"
echo "| Trying to rename ' Incoming' back to '_Incoming' -- Failure=OKAY  |"
echo "+-------------------------------------------------------------------+"
mv -v /run/media/chad/New\ Volume/Chad/\ Incoming \
      /run/media/chad/New\ Volume/Chad/_Incoming

echo "+-------------------------------------------------------------------+"
echo "|              Sorting and Moving Files based on Alpha              |"
echo "+-------------------------------------------------------------------+"
for i in /run/media/chad/New\ Volume/Chad/_Incoming/\*; do 
    echo "i:$i"
    FILE=$(basename "$i")
    echo "FILE:$FILE"
    LTR=$(echo "${FILE:0:1}" | tr [:lower:] [:upper:] )
    echo "LTR:$LTR"
    NEWFILE="/run/media/chad/New Volume/Chad/$LTR/$FILE"
    echo "NEWFILE:$NEWFILE"
    mv -v "$i" "${NEWFILE//_/ }"
done

echo "+-------------------------------------------------------------------+"
echo "|             Moving the left-overs to the '@' directory            |"
echo "+-------------------------------------------------------------------+"
mv -v /run/media/chad/New\ Volume/Chad/_Incoming/* /run/media/chad/New\ Volume/Chad/@

Вот выводкогда мне нужно переместить пару файлов:

+-------------------------------------------------------------------+
|               Removing _ and replacing with space                 |
+-------------------------------------------------------------------+
renamed '/run/media/chad/New Volume/Chad/_Incoming/' -> '/run/media/chad/New Volume/Chad/ Incoming'
+-------------------------------------------------------------------+
| Trying to rename ' Incoming' back to '_Incoming' -- Failure=OKAY  |
+-------------------------------------------------------------------+
renamed '/run/media/chad/New Volume/Chad/ Incoming' -> '/run/media/chad/New Volume/Chad/_Incoming'
+-------------------------------------------------------------------+
|              Sorting and Moving Files based on Alpha              |
+-------------------------------------------------------------------+
i:/run/media/chad/New Volume/Chad/_Incoming/*
FILE:*
LTR:*
NEWFILE:/run/media/chad/New Volume/Chad/*/*
+-------------------------------------------------------------------+
|             Moving the left-overs to the '@' directory            |
+-------------------------------------------------------------------+
renamed '/run/media/chad/New Volume/Chad/_Incoming/Deep-fried Sea Bream - Mukbang eating show.mp4' -> '/run/media/chad/New Volume/Chad/@/Deep-fried Sea Bream - Mukbang eating show.mp4'
renamed '/run/media/chad/New Volume/Chad/_Incoming/HOW TO BUILD A PLANT SUPPORT.mp4' -> '/run/media/chad/New Volume/Chad/@/HOW TO BUILD A PLANT SUPPORT.mp4'

1 Ответ

2 голосов
/ 20 мая 2019

Когда вы используете обратную косую черту *, она больше не является символом подстановки.Так что

for i in /run/media/chad/New\ Volume/Chad/_Incoming/\*; do

не делает то, что вы ожидаете, и то, что он делает, видно из результатов отладки (т. Е. Он устанавливает $i в несуществующий каталог /run/media/chad/New\ Volume/Chad/_Incoming/*.

Когда вы исправите это, вы обнаружите, что

mv -v /run/media/chad/New\ Volume/Chad/_Incoming/* /run/media/chad/New\ Volume/Chad/@

на самом деле не делает то, что вы хотите, потому что все вновь созданные каталоги в /run/media/chad/New\ Volume/Chad/_Incoming/ будут соответствовать глобу и перемещаться в @.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...