如何复制 Bash 中超过 1 行的文件
How to copy files in Bash that have more than 1 line
我正在尝试将文件从一个目录(定义为下面的 $inDir)复制到另一个目录(定义为下面的 $outDir),如果它们 1) 存在并且 2) 文件中有超过 1 行(这是为了避免复制空文本文件)。我可以使用下面的代码完成第一部分,但我很难知道如何完成后一部分。我猜测可能会以某种方式使用 awk 和 NR,但我不太擅长 Bash 中的编码,因此我们将不胜感激。如果可能的话,我希望将其合并到下面,以便可以一步完成。
for i in $inDir/NVDI_500m_mean_distance_*_40PCs; do
batch_name_dir=$i;
batch_name=$(basename $i);
if [ ! -f $outDir/${batch_name}.plink.gz ]; then
echo 'Copying' $batch_name;
find $batch_name_dir -name ${batch_name}.plink.gz -exec cp {} $outDir/${batch_name}.plink.gz \;
else
echo $batch_name 'already exists'
fi
done
您可以使用 wc -l
检查文件中的行数,并使用 awk
仅从结果中去除数字。
lines=$(wc -l $YOUR_FILE_NAME | awk '{print }')
if [ $lines -gt 0 ]; then
//copy the file
fi
编辑:我已根据下面的评论将 LINES 更正为行。
我提议:
for f in "$(find $indir -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty)";
do
cp "$f" /some/targetdir;
done
find
比 wc
更快地检查零大小。
我主观上认为它比其他解决方案更具可读性。
但是,for-loop 不是必需的,因为:
find "$indir" -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty |\
xargs -I % cp % /some/targetdir/%
总是 "quote" 路径字符串,因为大多数 shell 实用程序在字符串中有未转义的 shell 字符或空格时中断。很少有充分的理由使用不带引号的字符串。
我正在尝试将文件从一个目录(定义为下面的 $inDir)复制到另一个目录(定义为下面的 $outDir),如果它们 1) 存在并且 2) 文件中有超过 1 行(这是为了避免复制空文本文件)。我可以使用下面的代码完成第一部分,但我很难知道如何完成后一部分。我猜测可能会以某种方式使用 awk 和 NR,但我不太擅长 Bash 中的编码,因此我们将不胜感激。如果可能的话,我希望将其合并到下面,以便可以一步完成。
for i in $inDir/NVDI_500m_mean_distance_*_40PCs; do
batch_name_dir=$i;
batch_name=$(basename $i);
if [ ! -f $outDir/${batch_name}.plink.gz ]; then
echo 'Copying' $batch_name;
find $batch_name_dir -name ${batch_name}.plink.gz -exec cp {} $outDir/${batch_name}.plink.gz \;
else
echo $batch_name 'already exists'
fi
done
您可以使用 wc -l
检查文件中的行数,并使用 awk
仅从结果中去除数字。
lines=$(wc -l $YOUR_FILE_NAME | awk '{print }')
if [ $lines -gt 0 ]; then
//copy the file
fi
编辑:我已根据下面的评论将 LINES 更正为行。
我提议:
for f in "$(find $indir -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty)";
do
cp "$f" /some/targetdir;
done
find
比 wc
更快地检查零大小。
我主观上认为它比其他解决方案更具可读性。
但是,for-loop 不是必需的,因为:
find "$indir" -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty |\
xargs -I % cp % /some/targetdir/%
总是 "quote" 路径字符串,因为大多数 shell 实用程序在字符串中有未转义的 shell 字符或空格时中断。很少有充分的理由使用不带引号的字符串。