将 x 个文件移动到其他目录

周支付

我发现这个 bash 脚本很好用

for file in $(ls -p | grep -v / | tail -241)
do
mv $file ../01
done

我的 bash foo 很弱,基本上如果我在目录中运行会将最后 241 个文件移动到 /01 的文件夹中

问题是脚本本身必须在包含所有文件的目录中,而我当前的挂载没有执行权限。我想要做的是从文件夹外的某个地方执行这个脚本,例如我的工作目录 /home/user/

我当前的根目录与我想要编写脚本的所有文件位于不同的驱动器/分区上。

for file in **/media/storage1/allfiles** $(ls -p | grep -v / | tail -241)
do
mv $file ../01  <this should remain local to /media/storage/
done

** 编辑 ** 我通过在循环之前添加这个来让它工作cd the/directory/I/want/to/be/in

例如

cd /media/storage1/allfiles  
for file in $(ls -p | grep -v / | tail -241)
do
    mv $file ../01
done

更好的问题是:这是正确的方法,还是有正确的方法?

切普纳

在 中bash,我会执行以下操作以避免使用ls. 它利用了这样一个事实,即您没有尝试以任何特定方式对文件进行排序,因此路径名扩展提供的任何顺序就足够了。

cd /media/storage1/allfiles
# Get *all* regular files in the target directory
for f in *; do
    [[ -f $f ]] && files+=("$f")
done
# Get the file count
n=${#files[@]}
# How many files are we *not* moving
# Assume n > 241
keep=$((n - 241 ))
# Move the last 241 files
mv -- "${files[@]:keep}" ../01

据推测,241 个文件不会长到溢出命令行。


不请自来的zsh插头...

zsh 使这更容易一些,因为您可以让 shell 使用 glob 本身进行很多选择工作。

mv /media/storage/allfiles/*(.On[1,241]) ../01

(...)下面的水珠是一组限制文件的列表产生水珠预选赛。.表示只应匹配常规文件。On按名称以相反的顺序对列表进行排序(可以通过替换n为适当的字符来使用其他排序顺序)。[1,241]将列表限制为前 241 个文件;由于我们以相反的顺序排序,这为您提供了最后 241 个文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用CSV文件将文件移动到其他目录

如何使用Azure数据工厂将场所文件移动到其他目录

Unity-将脚本文件移动到其他目录而不会丢失参考

将文件从多个目录移动到一个目录

无法将文件移动到其他文件夹

将打开的文件移动到其他设备

C ++嵌套类-将实现移动到其他文件

将照片移动到其他文件夹iOS

批处理脚本将x个文件移动到空文件夹

如何通过终端命令将所有文件和目录复制或移动到其他用户

当我将文件移动到同一分区上的其他目录时,文件的数据实际上是否在磁盘上移动?

将 AndroidStudioProjects 移动到其他磁盘

Git命令将admin(.git)目录移动到其他位置

Git子树:将子树移动到其他目录并将其拉出

如何正确地将configure --prefix = XX已安装的程序移动到其他目录?

我们如何将工作目录移动到其他位置?

将Docker / var / run / docker数据移动到其他目录

将多个文件移动到多个目录

仅将目录中的最后8个文件移动到另一个目录

将文件从未知文件夹移动到其他文件夹

将嵌套文件夹的所有文件移动到其他文件夹

如何将文件从默认目录移动到另一个目录?

将大量文件和目录移动到另一个目录

将子目录中的文件移动到另一个目录

使用Pyspark将文件从HDFS中的一个目录移动到另一目录

仅将第一个文件从任何目录移动到当前目录

如何将多个文件从多个目录移动到一个目录

将文件从根目录移动到另一个用户的主目录

将文件夹移动到按年份排序的其他文件夹