我有一个文本文件,其中包含如下文件列表:
list.txt的内容:
file1.txt
file2.txt
file3.txt
我需要搜索一个目录(及其子目录)来查找每个文件并将其复制到另一个目录中。
当前目录: -dir -subdir1 -subdir2 -subdir3 -subdir4 -outputdir
在这个例子中,我可能会:
file1.txt
subdir3
file2.txt
subdir1
file3.txt
可能不存在 在这种情况下,它会复制file1.txt
& file2.txt
outputdir
我没有太多经验在命令行上这样做,但有1200个文件要移动,所以我不能手动完成。这是我得到的最接近的东西,但它没有找到任何文件,因为它们都在子目录中:
xargs -a list.txt cp -t outputdir
对你给出的命令的解释也会非常有帮助。搜索周围也提出了“bash for loops”,我试图使用它但无法弄清楚所有错综复杂的行为:
FOR /R "%~dp0" %%I IN (.) DO for /f "usebackq delims=" %%a in ("%~dp0list.txt") do echo d |xcopy "%%I\%%a" "outputdir" /e /i
答案 0 :(得分:0)
如果您有bash
4,请使用以下内容:
shopt -s globstar nullglob
while IFS= read -r fname; do
files=("$dir"/**/"$fname")
if (( ${#files[@]} > 0 )); then
cp "${files[@]}" "$outputdir"
fi
done < list.txt
while
循环一次从list.txt
一行读取。 **
模式匹配零个或多个目录; files
可以包含0个或更多匹配文件。如果数组不为空,则所有文件名都将传递给cp
进行复制。
对于旧版本,请使用find
:
while IFS= read -r fname; do
find "$dir" -name "$fname" -type f -exec cp {} "$outputdir" \;
done < list.txt
这只是在$dir
下找到所有匹配的文件,并在每个文件上运行cp
。