将带有路径的文件名与文件一起移动到目录中的文件

时间:2019-02-28 09:20:18

标签: bash shell unix

我只在使用以下文件的文本文件中移动文件名:

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

但是,我还需要:

  1. 还将Asset_*个文件移动到/data/processing/中。
  2. 将前1000个文件移至/data/processing/

如何添加这两件事?

2 个答案:

答案 0 :(得分:2)

@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

答案 1 :(得分:1)

您的路线错误,想要复制/移动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 \;