2016-08-12 159 views
0

我有一个文件夹大约7000个文件夹,我需要将第一个x文件复制或移动到另一个文件夹。将x文件从一个文件夹复制到另一个

我现在简单的脚本是:

for file in $(ls -p | grep -v/| tail -100) 
    do 
    echo $file 
    cp $file "/other /Folder" 

done 

,但是当有文件名空间它不工作。命令grep只接受名称的第一部分。我愿意接受任何建议并学习如何操作?

+2

需要引用$文件,例如“$ file” – user3439894

+0

我同意@ user3439894。空白字符或任何特殊字符不适用于您的脚本。作为一般规则,不要分析ls的输出。参数和命令替换应该用双引号。 – 0x23212f

回答

2

您还可以使用简单的for循环和count来跳过第一个count文件数量,然后移动其余的文件,例如,跳过第一3文件(或文件夹):

$ skip=3; for i in *; do ((skip > 0)) && { ((skip--)); continue; }; mv "$i" "$destdir"; done 

,或者以脚本形式:

skip=3 
for i in *; do 
    ((skip > 0)) && { ((skip--)); continue; } 
    mv "$i" "$destdir" 
done 
+0

奇怪的跳过值不要在那里改变.... – marciton

+0

嗯。这很奇怪,你在运行什么OS/shell?由于使用POSIX算术处理和比较,因此不应该担心。你可以试试'[“$ skip”-gt'0'] && {skip = $(expr“$ skip” - 1);继续; }如果你的平台在使用POSIX'((...))'表示法时遇到困难。 (确保'expr'中有*空格*如果你走这条路线,跳过“ - 1”)你也可以尝试* hinting *到'shell','skip'是一个'integer',带'declare -i skip'或者尝试'skip = $((skip-1))'而不是'((skip - ))' –

+0

它可以在OS X El Capitan 10.11.5中正常工作:'BASH_VERSION ='3.2.57 1)-release'' – user3439894

相关问题