使用Linux将特定数量的文件从on directory复制到另一个目录

时间:2014-02-21 15:09:47

标签: linux shell

我有一个包含8000+拟合文件的目录,我想知道是否有办法将它们的增量复制到其他目录,这样我就可以拥有8个目录,其中每个目录大约有1000个拟合文件,或者有2000个目录适合文件?

3 个答案:

答案 0 :(得分:2)

这样的事情可以做到:

dir=1
counter=1

for file in spec*
do
   echo "cp $file dir_$dir"
   ((counter++))
   (( $counter%1000 == 1 )) && ((dir++))
done

解释

  • dir=1counter=1正在设置变量。
  • for file in spec*循环遍历spec*模式名称文件。
  • echo "cp $file dir_$dir"将输出cp spec123 dir_1 / dir_2,...我使用了echo,以便您可以在继续之前检查行为并执行正确的cp。< / LI>
  • ((counter++))会增加counter变量计数器。
  • (( $counter%1000 == 1 )) && ((dir++))如果$counter位于表单1000K + 1上,请增加$dir的值。

答案 1 :(得分:0)

要扩展fedorqui编写的脚本以满足您的需要,您可以执行以下操作:

创建一个文件,

$ nano mycopy.sh(您可以选择自己的名字)

粘贴以下内容并保存文件:

source=$1
dir=1
counter=1

mkdir dir_$dir
for file in `ls $source`
do
   cp -r $source$file dir_$dir/
   ((counter++))
   (( $counter%1000 == 1 )) && ((dir++)) && ((`mkdir dir_$dir`))
done

通过

使您的文件可执行
$ chmod u+x mycopy.sh

现在通过运行

执行脚本
$ ./mycopy.sh MyDirectoryWithManyFiles/

其中MyDirectoryWithManyFiles /是包含文件的目录

该脚本将创建子目录并在其中最多复制1000个文件

答案 2 :(得分:0)

以下是在Python中执行此操作的方法:

创建一个名为“manage_files.py”的新文件,将此代码放入其中:

# Hat-tip to http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-with-python
import os
import glob
from subprocess import call

# Initialise
my_dir = 'files_are_here'
num_files = 10

# Get a list of all files in my_dir
os.chdir(my_dir)
all_files = glob.glob('*')

for i in range((len(all_files) / num_files) + 1):
    files = all_files[i * num_files:(i + 1) * num_files]
    dirname = "dir_%s" % i
    call(["mkdir", dirname])
    file_names = ' '.join(files)
    arg = ['mv', '-t', '%s/' % dirname]
    arg.extend(files)
    call(arg)

然后,从Linux shell类型python manage_files.py开始,魔法会做它的东西。