脚本的新手。
我试着做以下几点
我有一个包含以下内容的文件夹:
/folder/Tv Series Name S01E01 - Episode Name A.avi
/folder/Tv Series Name S01E02 - Episode Name B.avi
/folder/Tv Series Name S01E03 - Episode Name C.avi
/folder/Tv Series Name S01E04 - Episode Name D.avi
/folder/Tv Series Name S01E05 - Episode Name E.avi
我想创建一个文件夹并将文件移动到它的特定文件夹:
/folder/Tv Series Name S01E01/Tv Series Name S01E01 - Episode Name A.avi
/folder/Tv Series Name S01E02/Tv Series Name S01E02 - Episode Name B.avi
/folder/Tv Series Name S01E03/Tv Series Name S01E03 - Episode Name C.avi
/folder/Tv Series Name S01E04/Tv Series Name S01E04 - Episode Name D.avi
/folder/Tv Series Name S01E05/Tv Series Name S01E05 - Episode Name E.avi
我试过了:
cd ...Path/folder
ls -1 |
while read filename
do
newPath=`echo $filename|sed "s/-[^-]*$//"`
mv $filename ...Path/folder/$newPath/$filename
done
我设法得到我想要的名字,但我无法创建/移动到文件夹。
答案 0 :(得分:1)
这应该是你提供的例子:
for file in *.avi; do
dir=${file%% -*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
哦,这不会做任何事情,只回显将要执行的命令。如果您对所看到的内容感到满意,请移除这两个echo
。 (从/folder
内执行。)
答案 1 :(得分:1)
你的报价错了。你应该基本上总是在带有文件名的变量周围使用双引号(在其他情况下也是大部分时间)。
此外,您不应解析ls
输出,而是使用for
循环,而不是惯用。
最后,使用shell的内置字符串替换而不是两个外部进程更有效。
cd .../Path/to/folder
for filename in *; do
newPath=${filename%\ -*}
mkdir -p "$newPath"
mv "$filename" "$newPath"
done
答案 2 :(得分:1)
我刚刚使用过这个,但做了以下改动:
dir=${file%% -*}
到
dir=${file%%.*}
因为我的名字仍然是文件扩展名的文件夹 上述变化消除了这一点 谢谢!
为了方便而粘贴在下面
for file in *.mpg; do
dir=${file%%.*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
只需将.mpg替换为您要查找的文件类型即可。
编辑:
重要!
确保您的文件名不包含任何“。”
以上创建文件夹名称直到第一个“。”它在文件名中找到。