我有一个文件夹大约7000个文件夹,我需要将第一个x文件复制或移动到另一个文件夹。将x文件从一个文件夹复制到另一个
我现在简单的脚本是:
for file in $(ls -p | grep -v/| tail -100)
do
echo $file
cp $file "/other /Folder"
done
,但是当有文件名空间它不工作。命令grep只接受名称的第一部分。我愿意接受任何建议并学习如何操作?
我有一个文件夹大约7000个文件夹,我需要将第一个x文件复制或移动到另一个文件夹。将x文件从一个文件夹复制到另一个
我现在简单的脚本是:
for file in $(ls -p | grep -v/| tail -100)
do
echo $file
cp $file "/other /Folder"
done
,但是当有文件名空间它不工作。命令grep只接受名称的第一部分。我愿意接受任何建议并学习如何操作?
您还可以使用简单的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
奇怪的跳过值不要在那里改变.... – marciton
嗯。这很奇怪,你在运行什么OS/shell?由于使用POSIX算术处理和比较,因此不应该担心。你可以试试'[“$ skip”-gt'0'] && {skip = $(expr“$ skip” - 1);继续; }如果你的平台在使用POSIX'((...))'表示法时遇到困难。 (确保'expr'中有*空格*如果你走这条路线,跳过“ - 1”)你也可以尝试* hinting *到'shell','skip'是一个'integer',带'declare -i skip'或者尝试'skip = $((skip-1))'而不是'((skip - ))' –
它可以在OS X El Capitan 10.11.5中正常工作:'BASH_VERSION ='3.2.57 1)-release'' – user3439894
需要引用$文件,例如“$ file” – user3439894
我同意@ user3439894。空白字符或任何特殊字符不适用于您的脚本。作为一般规则,不要分析ls的输出。参数和命令替换应该用双引号。 – 0x23212f