如何更正此 UNIX 命令以将文件复制到目录中?

How do I correct this UNIX command for copying files into a directory?

我的以下命令不起作用

while read line; do ls $line | head -10 | cp xargs dest_folder; done < my_file.txt

objective 是我有一个名为 my_file.txt 的文件,其中每一行都包含一个文件夹的名称。我想将此文件每一行提到的每个目录中的 10 个文件复制到 dest_folder.

如何更正上述命令?

您可以将 xargs-I 选项一起使用:

while read line; do ls $line | head -10 | xargs -I % cp % dest_folder; done

您可以使用以下 bash 脚本实现此目的:

#!/bin/bash

# first argument is the filename which contains ton each line a name of a folder
# teh second argument is the destination folder

while IFS='' read -r line || [[ -n "$line" ]]; do
    filesToCopy=($(ls $line |head -n 10))
    for i in "${filesToCopy[@]}"
    do
        :
        cp $line/$i 
    done

done < ""

用法:

chmod +x your_bash_script
./your_bash_script my_file.txt dest_folder

注:

文件中的文件夹名称应该是绝对路径。

通常,您 should not use the output of ls 以编程方式。使用第二个循环遍历每个目录中的文件。

while IFS= read -r directory; do
    count=0
    for f in "$directory"/*; do
        (( count++ < 10 )) || break
        cp -- "$f" "$dest_folder"
    done
done < my_file.txt

这将适用于在目录中找到的任何 合法文件名。