我有一个包含8000多个fits文件的目录,我想知道是否有一种方法可以将它们的增量复制到其他目录中,这样我就可以拥有大约1000个fits文件的8个目录或2000个fits文件的4个目录。
dir=1
counter=1
for file in spec*
do
echo "cp $file dir_$dir"
((counter++))
(( $counter%1000 == 1 )) && ((dir++))
done
dir=1
和counter=1
设置变量。for file in spec*
循环通过spec*
模式名称文件。echo "cp $file dir_$dir"
将输出类似于cp spec123 dir_1
/ dir_2,...我使用echo
以便您在继续执行正确的cp
之前检查行为。((counter++))
增加counter
变量的计数器。(( $counter%1000 == 1 )) && ((dir++))
如果$counter
处于形式1000K+1,则增加$dir
的值。1000
更改为你想要分组的数字。此外,创建的目录将以dir_1
、dir_2
等命名。你可以在cp $file ...
部分进行更改。还要注意,我正在使用echo
命令,这样你就可以测试并查看它是否有效。然后,删除echo
,只保留cp $file dir_$dir
。要了解如何执行它,请参考suenda的答案。 - undefinedsource=$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个文件复制到其中
希望它能对你有所帮助!
在这里,rootfile 文件夹包含多个文件,这些文件名包含像 ..om500..、..om501.. 或 ..om502.. 这样的名称。
因此,我想将每个文件名的特定数字复制到rootfile文件夹内的新文件夹rootrate中。
#!/bin/bash
mkdir rootfile/rootrate
for ((j=500;j<503;j++)); do
echo $j
file=(`ls rootfile/*om${j}_*.root`)
if [ "$j" -eq "500" ];
then
max=60
fi
if [ "$j" -eq "501" ];
then
max=8
fi
if [ "$j" -eq "502" ];
then
max=120
fi
for ((i = 0; i<max ; i++)); do
echo "${file[i]}"
echo $i
cp "${file[i]}" rootfile/rootrate/
done
done
# Hat-tip to https://dev59.com/XG865IYBdhLWcg3wIrFg
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)
python manage_files.py
,魔术将完成其工作。
$i
是一个在超过1000阈值时递增的变量。 - undefined