【问题标题】:Bash Script to Copy Folders by first characterBash 脚本按第一个字符复制文件夹
【发布时间】:2014-01-13 05:07:54
【问题描述】:

我是 ubuntu/Linux 的新手,刚刚执行了我的第一个 bash 脚本。

我正在尝试将我的音乐收藏从 driveA 复制和整理到 driveB。

driveA 有我所有的艺术家文件夹(例如 Adele、Brian、Bob Marley、Cassie)到这个 /media/myMusic 的路径

在驱动器 B 中,我创建了文件夹 A、B、C,它们的路径是 /media/orderedMusic

driveA 中第一个字符为 A 或 B 或 C 的所有艺术家文件夹将被复制到 driveB 中的相应文件夹,即 Adele 将被复制到 /media/orderedMusic/A, Brian 和 Bob Marley 将被复制到 /media/orderedMusic/B 等等。

这是我到目前为止所拥有的,我们将不胜感激。谢谢

#!/bin/bash

folder1=/media/myMusic
folder2=/media/orderedMusic

for dir in $folder1
do
  if []
  then
    cp
  fi
done

【问题讨论】:

    标签: linux bash ubuntu grep


    【解决方案1】:

    您可以使用子字符串提取:${string:start_index:length}:

    #!/bin/bash
    
    folder1=/media/myMusic
    folder2=/media/orderedMusic
    
    for dir in "$folder1/*"
    do
        initial=${dir:0:1}
        src="$folder1/$dir"
        dest="$folder2/$initial"
        # test if the destination directory exists
        if [ ! -d "$dest" ]
        then
            mkdir $dest
        fi
        cp -r $src $dest
    done
    

    您也可以使用字符串索引,因为您只需要字符串中的第一个字符。
    更多详情请见http://tldp.org/LDP/abs/html/string-manipulation.html

    【讨论】:

    • for dir in $folder1 不会遍历目录的内容。
    • 所以我得到一个错误 cp: cannot stat `/media/myMusic//media/orderedMusic ': No such file or directory 我认为它正在寻找一个只有第一个字符作为名称的文件夹?
    • @MarkReed 非常感谢您指出这一点。我直接从 OP 复制了这些行,并没有对其进行太多检查...再次感谢您 :)
    • @Sam-i-Am 对不起我的错误。请参阅马克的评论和我编辑的答案。
    【解决方案2】:

    这应该可以解决问题:

    #!/usr/bin/env bash
    
    folder1=/media/myMusic
    folder2=/media/orderedMusic
    
    cd "$folder1" && {
      for artist in *; do
        dest=$folder2/${artist:0:1}
        mkdir -p "$dest"
        cp -rp "$artist" "$dest"
      done
    }
    

    请注意,如果您使用的是区分大小写的文件系统并且艺术家姓名不大写,那么您将在目标树中为这两种情况获得单独的文件夹。例如一个“A”文件夹和一个“a”文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2014-04-15
      相关资源
      最近更新 更多