【发布时间】:2019-05-20 16:50:31
【问题描述】:
我编写了一个脚本,根据文件名的第一个字母将文件从 _Incoming 目录移动到 ../[A-Z] 目录。
它似乎无法正常工作,因为此目录中的所有剩余文件都被移动到默认的“../@”目录中。
这是我正在使用的脚本:
#!/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'
【问题讨论】:
-
最后一个反斜杠是有意的吗?
for i in /run/media/chad/New\ Volume/Chad/_Incoming/\* -
删除你的代码,直到问题仍然存在。
-
您的两个 cmets 都非常有帮助。谢谢。
标签: bash