Macos Bash脚本将文件移动到以文件命名的文件夹中
对脚本编写相当陌生。Macos Bash脚本将文件移动到以文件命名的文件夹中,macos,bash,sed,scripting,terminal,Macos,Bash,Sed,Scripting,Terminal,对脚本编写相当陌生。 我正在尝试做以下工作。 我有一个文件夹,其中包含: /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 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
我设法获得了所需的名称,但无法创建/移动到文件夹。这应该可以,使用您提供的示例:
for file in *.avi; do
dir=${file%% -*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
哦,这不会做任何事情,只是回显将要执行的命令。如果您对看到的内容感到满意,请删除两个
echo
s。(从/文件夹中执行它)。应该这样做,使用您提供的示例:
for file in *.avi; do
dir=${file%% -*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
哦,这不会做任何事情,只是回显将要执行的命令。如果您对看到的内容感到满意,请删除两个echo
s。(从/文件夹中执行它)。应该这样做,使用您提供的示例:
for file in *.avi; do
dir=${file%% -*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
哦,这不会做任何事情,只是回显将要执行的命令。如果您对看到的内容感到满意,请删除两个echo
s。(从/文件夹中执行它)。应该这样做,使用您提供的示例:
for file in *.avi; do
dir=${file%% -*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
哦,这不会做任何事情,只是回显将要执行的命令。如果您对看到的内容感到满意,请删除两个echo
s。(从/文件夹中执行)您的引用是错误的。基本上,您应该始终在带有文件名的变量周围使用双引号(大多数情况下,在其他情况下也是如此)
此外,您不应该解析ls
输出,而应该按照惯用方式使用for
循环
最后,使用shell的内置字符串替换比使用两个外部进程更有效
cd .../Path/to/folder
for filename in *; do
newPath=${filename%\ -*}
mkdir -p "$newPath"
mv "$filename" "$newPath"
done
你的报价是错误的。基本上,您应该始终在带有文件名的变量周围使用双引号(大多数情况下,在其他情况下也是如此)
此外,您不应该解析ls
输出,而应该按照惯用方式使用for
循环
最后,使用shell的内置字符串替换比使用两个外部进程更有效
cd .../Path/to/folder
for filename in *; do
newPath=${filename%\ -*}
mkdir -p "$newPath"
mv "$filename" "$newPath"
done
你的报价是错误的。基本上,您应该始终在带有文件名的变量周围使用双引号(大多数情况下,在其他情况下也是如此)
此外,您不应该解析ls
输出,而应该按照惯用方式使用for
循环
最后,使用shell的内置字符串替换比使用两个外部进程更有效
cd .../Path/to/folder
for filename in *; do
newPath=${filename%\ -*}
mkdir -p "$newPath"
mv "$filename" "$newPath"
done
你的报价是错误的。基本上,您应该始终在带有文件名的变量周围使用双引号(大多数情况下,在其他情况下也是如此)
此外,您不应该解析ls
输出,而应该按照惯用方式使用for
循环
最后,使用shell的内置字符串替换比使用两个外部进程更有效
cd .../Path/to/folder
for filename in *; do
newPath=${filename%\ -*}
mkdir -p "$newPath"
mv "$filename" "$newPath"
done
我只是使用了这个,但做了以下更改:
dir=${file%% -*}
到
因为我正在获取文件扩展名仍在名称中的文件夹。
上述更改将删除该选项。
谢谢大家!
贴在下面方便
for file in *.mpg; do
dir=${file%%.*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
只需将.mpg替换为您要查找的文件类型
编辑:
重要
确保您的文件名不包含任何“.”
上面创建的文件夹名一直到第一个“.”它在文件名中找到。我刚刚使用了这个,但做了以下更改:
dir=${file%% -*}
到
因为我正在获取文件扩展名仍在名称中的文件夹。
上述更改将删除该选项。
谢谢大家!
贴在下面方便
for file in *.mpg; do
dir=${file%%.*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
只需将.mpg替换为您要查找的文件类型
编辑:
重要
确保您的文件名不包含任何“.”
上面创建的文件夹名一直到第一个“.”它在文件名中找到。我刚刚使用了这个,但做了以下更改:
dir=${file%% -*}
到
因为我正在获取文件扩展名仍在名称中的文件夹。
上述更改将删除该选项。
谢谢大家!
贴在下面方便
for file in *.mpg; do
dir=${file%%.*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
只需将.mpg替换为您要查找的文件类型
编辑:
重要
确保您的文件名不包含任何“.”
上面创建的文件夹名一直到第一个“.”它在文件名中找到。我刚刚使用了这个,但做了以下更改:
dir=${file%% -*}
到
因为我正在获取文件扩展名仍在名称中的文件夹。
上述更改将删除该选项。
谢谢大家!
贴在下面方便
for file in *.mpg; do
dir=${file%%.*}
echo mkdir -p -- "$dir"
echo mv "$file" "$dir"
done
只需将.mpg替换为您要查找的文件类型
编辑:
重要
确保您的文件名不包含任何“.”
上面创建了文件夹名,直到它在文件名中找到的第一个“.”