我在 Linux 上,我试图从包含数百万个文件的目录 (SOURCE_DIR) 中查找数千个文件。我有一个需要查找的文件名列表,存储在单个文本文件 (FILE_LIST) 中。该文件的每一行都包含一个与 SOURCE_DIR 中的文件相对应的名称,并且该文件中有数千行。
## FILE_LIST contain single word file names, each per line
#Name0001
#Name0002
#..
#Name9999
Run Code Online (Sandbox Code Playgroud)
我想将文件复制到另一个目录 (DESTINATION_DIR)。我写了下面的循环,里面有循环,一一查找。
#!/bin/bash
FILE_LIST='file.list'
## FILE_LIST contain single word file names, each per line
#Name0001
#Name0002
#..
#Name9999
SOURCE_DIR='/path/to/source/files' # Contain millions of files in sub-directories
DESTINATION_DIR='/path/to/destination/files' # Files will be copied to here
while read FILE_NAME
do
echo $FILE_NAME
for FILE_NAME_WITH_PATH in `find SOURCE_DIR -maxdepth 3 -name "$FILE_NAME*" -type f -exec readlink -f {} \;`;
do …Run Code Online (Sandbox Code Playgroud) 我想做一个 \xe2\x80\x98 搜索并用非结构化文本替换大约 100 个数据文件上的 \xe2\x80\x99 。每个文件大小约为 50 MB,行数为 50k。大约有20k个术语需要搜索和替换,它们存储在另一个文件中;\'terms_list.csv\',一个包含三列 COL1、COL2 和 COL3 的 CSV 格式文件。我需要在 100 个数据文件中的每个数据文件的 \'terms_list.csv\' 的 COL1 和 COL2 中搜索单词,如果找到其中一个单词,则替换为 COL3 中的相应单词。
\n\n凭借我对 shell 脚本编写的基本知识,我使用 AWK/SED 循环编写了以下 shell 脚本。它从 20k 行 \xe2\x80\x98terms_list.csv\xe2\x80\x99 中逐行读取,并在 100 个文件中的每个文件中搜索 COL1 和 COL2,如果找到,将替换为 COL3。
\n\nfor DATA_FILE in $(ls text_data_file_*.csv) #Data files (100 files) with 50k lines; contain terms in COL1 and COL2 of terms_list.csv\ndo\n while read -r line; \n do\n x=$(echo $line | awk -F\',\' \'{print $1}\'); \\\n y=$(echo …Run Code Online (Sandbox Code Playgroud)