如何更正此 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
这将适用于在目录中找到的任何 合法文件名。
我的以下命令不起作用
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
这将适用于在目录中找到的任何 合法文件名。