【问题标题】:Move file names with path to a file in a directory along with files将带有路径的文件名与文件一起移动到目录中的文件
【发布时间】:2019-02-28 09:20:17
【问题描述】:

我只移动了正在使用的文本文件中的文件名:

cd /data/sources/
find $PWD -type f -name "Asset_*">> /data/processing/asset_files.txt

但是,我还需要:

  1. Asset_* 文件也移动到/data/processing/
  2. 将前 1000 个文件移动到 /data/processing/

如何添加这两个东西?

【问题讨论】:

  • 您的规格不清楚。使用 find 的 -exec 选项移动 Asset_* 文件很容易。但是“第一个”1000 个文件是什么?按字母顺序,创建时间,修改时间? Asset_* 文件的 1. 和 2. 有什么区别?
  • in 2) 我想移动 1000 个文件进行测试。
  • in 1) 如果有 1000 个文件它可以工作,那么我将移动所有文件

标签: bash shell unix


【解决方案1】:

重构@Dominique 的答案,您可以使用 find 命令并移动文件。这可能需要很长时间(取决于文件数量) 命令是这样的:

cd /data/sources/
find $PWD -type f -name "Asset_*" -exec mv {} /target_dir \;

如果您想准确移动 1000 个文件,您可以使用类似的方法

a=1
cd /data/sources/
for i in $PWD/Asset_*
do
mv "$i" /target_dir
a=$(($a + 1))
if [ "$a" -gt 1000 ]
then break
fi
done

【讨论】:

  • 谢谢罗密欧和多米尼克。如果我想移动 1000 个 Asset_* 文件,我该怎么做
【解决方案2】:

您走错了路,想要复制/移动 1000 个条目。您似乎有很多 Asset_* 文件(超过 1000 个),并且通过将数量限制为 1000,您想检查行为是否正确,然后对整个文件执行此操作。
虽然这看起来是正确的,但限制为 1000 是一个相当大的负担,并且会使您的脚本变得毫无目的的复杂。
我建议另一种方法:假设您有这样的文件名:

Asset_00000
Asset_00001
Asset_00002
...
Asset_00010
Asset_00011
...
Asset_99999

然后,您可以先尝试使用Asset_0000* 执行您的操作,然后在您验证一切正确后,对所有Asset_* 文件执行此操作。

就搬家而言,您可以这样做:

find /directory -name "Asset_0000*" -exec mv {} /target_directory \;

【讨论】:

  • 文件名不像 Asset_0000,它是随机的。我要移动 1000 个文件
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 2018-09-20
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多