计算目录中的文件数,然后 scp 传输一定范围,例如 21404-42806

Count number of files in directory then scp transfer a certain range such as 21404-42806

我发现 /dev/shm/split/1/ 中的文件数是 42806,使用:

/bin/ls -lU /dev/shm/split/1/ | wc -l

我似乎在网上找不到的是如何select 某个范围,比如从 2​​1404-42806,并使用 scp 安全地复制这些文件。然后,出于管理目的,我想将我复制的文件移动到另一个文件夹,比如 /dev/shm/split/2/.

我如何使用 CentOS 做到这一点?

我试过了:

sudo chmod 400 ~/emails/name.pem ; ls -1 /dev/shm/split/1/ | sed -n '21443,42806p' | xargs -i scp -i ~/emails/name.pem {} root@ipaddress:/dev/shm/split/2/ 

这产生了:

no such file or directory

所有文件都有错误...

ls 本身会列出与您提供的目录相关的文件。这意味着您的 ls 打印目录中的文件名,但稍后, scp 没有它们的路径。您可以通过两种方式解决此问题:

给出scp的路径:

ls -1 /dev/shm/split/1/ | sed -n '21443,42806p' | xargs -i \
  scp -i ~/emails/name.pem /dev/shm/split/1/{} root@ipaddress:/dev/shm/split/2/ 

切换到那个目录,它将起作用:

cd /dev/shm/split/1/; ls -1 | sed -n '21443,42806p' | xargs -i \
  scp -i ~/emails/name.pem {} root@ipaddress:/dev/shm/split/2/