如何在 bash 中递归复制具有多个特定扩展名的文件
How to copy recursively files with multiple specific extensions in bash
我想在 bash 中递归复制具有特定扩展名的所有文件。
****编辑****
我已经写好了完整的剧本。我在 csv 文件中有名称列表,我正在遍历该列表中的每个名称,然后在其他地方创建一个具有相同名称的目录,然后我在我的源目录中搜索具有该名称的目录,在它里面几乎没有以 xlsx,tsv,html,gz
结尾的文件,我正在尝试将它们全部复制到新创建的目录中。
sample_list_filepath=/home/lists/papers
destination_path=/home/ds/samples
source_directories_path=/home/papers_final/new
cat $sample_list_filepath/sample_list.csv | while read line
do
echo $line
cd $source_directories_path/$line
cp -r *.{tsv,xlsx,html,gz} $source_directories_path/$line $destination_path
done
这行得通,但它会将所有文件复制到那里,不区分特定扩展名。
问题是什么?
解决问题的一个简单方法是使用 find
和 regex
:
find src/ -regex '.*\.\(tsv\|xlsx\|gz\|html\)$' -exec cp {} dest/ \;
find
在您指定的目录中递归查找(在我的示例中是 src/),允许您使用 -regex
进行过滤并应用命令以使用 -exec
匹配结果
对于正则表达式部分:
.*\.
取文件名和扩展名前的点,
\(tsv\|xlsx\|gz\|html\)$
用你想要的验证扩展。
exec 块是您对从正则表达式获得的文件执行的操作
-exec cp {} dest/ \;
在这种情况下,您将获得的内容({}
意思)复制到目标目录。
我想在 bash 中递归复制具有特定扩展名的所有文件。
****编辑****
我已经写好了完整的剧本。我在 csv 文件中有名称列表,我正在遍历该列表中的每个名称,然后在其他地方创建一个具有相同名称的目录,然后我在我的源目录中搜索具有该名称的目录,在它里面几乎没有以 xlsx,tsv,html,gz
结尾的文件,我正在尝试将它们全部复制到新创建的目录中。
sample_list_filepath=/home/lists/papers
destination_path=/home/ds/samples
source_directories_path=/home/papers_final/new
cat $sample_list_filepath/sample_list.csv | while read line
do
echo $line
cd $source_directories_path/$line
cp -r *.{tsv,xlsx,html,gz} $source_directories_path/$line $destination_path
done
这行得通,但它会将所有文件复制到那里,不区分特定扩展名。
问题是什么?
解决问题的一个简单方法是使用 find
和 regex
:
find src/ -regex '.*\.\(tsv\|xlsx\|gz\|html\)$' -exec cp {} dest/ \;
find
在您指定的目录中递归查找(在我的示例中是 src/),允许您使用 -regex
进行过滤并应用命令以使用 -exec
匹配结果
对于正则表达式部分:
.*\.
取文件名和扩展名前的点,
\(tsv\|xlsx\|gz\|html\)$
用你想要的验证扩展。
exec 块是您对从正则表达式获得的文件执行的操作
-exec cp {} dest/ \;
在这种情况下,您将获得的内容({}
意思)复制到目标目录。