【问题标题】:Bash Script to move files to a folder that are named after the file用于将文件移动到以文件命名的文件夹的 Bash 脚本
【发布时间】:2014-08-05 10:10:15
【问题描述】:

对脚本相当陌生。
我正在尝试执行以下操作。
我有一个文件夹,其中包含:

/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

我设法获得了我想要的名称,但我无法创建/移动到文件夹。

【问题讨论】:

    标签: macos bash sed scripting terminal


    【解决方案1】:

    我只是使用了这个,但做了以下更改:

    dir=${file%% -*}  
    

    dir=${file%%.*}
    

    因为我得到的文件夹的文件扩展名仍在名称中。
    上述更改消除了这一点。
    谢谢!

    为了方便,贴在下面

    for file in *.mpg; do
        dir=${file%%.*}
        echo mkdir -p -- "$dir"
        echo mv "$file" "$dir"
    done
    

    只需将 .mpg 替换为您要查找的文件类型即可。

    编辑: 重要!
    确保您的文件名不包含任何“.”
    以上创建文件夹名称,直到第一个“。”它在文件名中找到。

    【讨论】:

      【解决方案2】:

      你的引用是错误的。您基本上应该始终在带有文件名的变量周围使用双引号(在大多数情况下,在其他情况下也是如此)。

      此外,您不应该解析ls 输出,而是使用for 循环,习惯性地使用。

      最后,使用 shell 的内置字符串替换比使用两个外部进程更有效。

      cd .../Path/to/folder
      for filename in *; do
          newPath=${filename%\ -*}
          mkdir -p "$newPath"
          mv "$filename" "$newPath"
      done
      

      【讨论】:

        【解决方案3】:

        按照您提供的示例,这应该可以:

        for file in *.avi; do
            dir=${file%% -*}
            echo mkdir -p -- "$dir"
            echo mv "$file" "$dir"
        done
        

        哦,这不会做任何事情,只会回显将要执行的命令。如果您对所看到的内容感到满意,请删除两个 echos。 (在/folder 内执行)。

        【讨论】:

          猜你喜欢
          • 2017-02-01
          • 2021-12-26
          • 1970-01-01
          • 2014-08-03
          • 2014-12-27
          • 2015-11-15
          • 2011-12-25
          • 2014-12-15
          • 2016-06-22
          相关资源
          最近更新 更多