我有一个名为application_pdf
的大型目录,其中包含93k个文件。我的用例是将目录拆分为3个较小的子目录(与原始大目录不同的位置),每个子目录包含大约30k个文件。
这可以直接从命令行完成。
谢谢!
答案 0 :(得分:3)
使用bash:
x=("path/to/dir1" "path/to/dir2" "path/to/dir3")
c=0
for f in *
do
mv "$f" "${x[c]}"
c=$(( (c+1)%3 ))
done
答案 1 :(得分:0)
这样的事可能有用:
for x in $(ls -1 originPath/*.pdf | head -30000); do
mv originPath/$x destinationPath/
done
答案 2 :(得分:0)
如果你有 Perl 的rename
命令,你可以这样试试:
rename --dry-run -pe 'my @d=("dirA","dirB","dirC"); $_=$d[$N%3] . "/$_"' *.pdf
如果您不熟悉语法:
mkdir -p
@d
中的一个目录作为$N
rename
的函数
rename
$_
如果看起来不错,请移除--dry-run
。请首先使用复制的8-10个文件在小目录上运行,然后在尝试所有93k文件之前进行备份。
<强>测试强>
touch {0,1,2,3,4,5,6}.pdf
rename --dry-run -pe 'my @d=("dirA","dirB","dirC"); $_=$d[$N%3] . "/$_"' *.pdf
'0.pdf' would be renamed to 'dirB/0.pdf'
'1.pdf' would be renamed to 'dirC/1.pdf'
'2.pdf' would be renamed to 'dirA/2.pdf'
'3.pdf' would be renamed to 'dirB/3.pdf'
'4.pdf' would be renamed to 'dirC/4.pdf'
'5.pdf' would be renamed to 'dirA/5.pdf'
'6.pdf' would be renamed to 'dirB/6.pdf'
更多供我自己参考,但如果您没有 Perl rename
命令,则只能在 Perl 中执行此操作:
perl -e 'use File::Copy qw(move);my @d=("dirA","dirB","dirC"); my $N=0; @files = glob("*.pdf"); foreach $f (@files){my $t=$d[$N++%3] . "/$f"; print "Moving $f to $t\n"; move $f,$t}'