如何将随机选择的目录从外部硬盘传输到笔记本电脑并指定总数据的限制

如何将随机选择的目录从外部硬盘传输到笔记本电脑并指定总数据的限制

我的笔记本电脑硬盘是 120GB SSD。我还有一个 TB 外置硬盘,我用它来存储我的音乐、照片和视频。我喜欢在笔记本电脑上放一些音乐,以防我想听点什么而又无法上网(我通常不随身携带外置硬盘)。但如果我的笔记本电脑上有整个音乐收藏,那将占用我大量的可用空间。我想要一个工具,可以从我的外置硬盘中随机选择专辑,并将它们传输到我的笔记本电脑上的音乐收藏中。对于传输,我只想指定我想要传输的最大数据量。例如,我希望能够指定,从我的外置硬盘中的音乐收藏中获取 10GB 的随机专辑,并将它们放在我的笔记本电脑的音乐目录中,同时删除我笔记本电脑音乐目录中以前可用的内容。有没有可以帮助我实现这一点的工具?这对于将音乐传输到我的智能手机也很有用。PS 我是 Ubuntu 用户。

答案1

只要你不需要确切地10GB 的数据,大约 10GB,但不会更多,您可以编写一个 bash 函数来执行此操作。将以下几行添加到您的$HOME/.bashrc文件中:

function random_copy(){
    size=0; 
    tries=0;
    dirs=(); 
  ## The maximum size, change this to whatever you want
    limit=10000000
  ## The maximum number of times we will try to get 
  ## another dir if the current one is too big.
    maxtries=20
  ## While we have not reached the size limit
    while [[ $size -lt $limit ]] ; do 
  ## Find a random, non-empty directory from the source. 
  ## sort -R does a  random sort and head -n 1 prints the first line.
    dir="$(find $1/*/  -not -empty -type d | sort -R | head -n 1)"
  ## Get this dir's size
    dsize=$(du -s "$dir" | cut -f 1)
  ## If this dir does not make us pass the limit
    if [[  $((size + $dsize)) -le $limit ]]; then
        echo "Copying $dir" 1>&2
    ## Copy it to target
        cp -r "$dir" $2
    ## Add its size to $size
        let size+=$dsize
  ## If this dir makes us pass the limit
  ## try $maxtries times to find another that does not
    else
        let tries++;
        if [[ $tries -gt $maxtries ]]; then
        echo "" 1>&2;
        echo "Final size =  $size"
        break;
        fi
    fi
    done; 
}

然后您可以通过运行来调用该函数

random_copy /path/to/source /path/to/destination

例如

random_copy ~/Music /tmp/music

笔记

  • 该函数将查找以下文件夹在下面源目录。我假设您的每张专辑都在其自己的文件夹中。
  • 每次运行该函数时,最终得到的实际大小都会有所不同。如果某个目录超出了大小限制,它会再次尝试,直到$maxtries达到限制。您可以通过将其更改maxtries=20为您想要的任何内容来控制这一点。

答案2

使用工具随机复制

随机复制有三种模式:

  • file-based mode:从不同的源文件夹创建音乐集合的正常模式。

  • directory-based Mode:创建音乐集合,也是基于不同的源目录,但与基于文件的模式不同,目录的完整内容被复制。

  • A CD-based Mode:一种专门用于适应包含歌曲的 CD 或 DVD 大小的模式,因此剩余空间较少。目标文件可以是源文件或内部转换后的波形文件。

在此处输入图片描述

替代 Linux

Linux 的一个选择Mix2Stix

安装步骤和使用方法,请参见

在此处输入图片描述

笔记:Mix2Stix 要求系统上必须安装 Java。源代码包含在发行版中。


使用 find/cp 命令

find -L ~ -type f -name "*.mp3" | sort -R | tail -n50 | while read file; do cp "$file" /media/<yourdisk>; done

find命令将在您的用户文件夹中搜索 mp3 文件~-n50表示要复制多少个文件。

相关内容