Как скопировать файлы в Bash, которые имеют более 1 строки - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь скопировать файлы из одного каталога (определяемого как $ 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

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы можете использовать wc -l для проверки количества строк в файле и awk для удаления только числа из результата.

lines=$(wc -l $YOUR_FILE_NAME | awk '{print $1}')

if [ $lines -gt 0 ]; then 
    //copy the file 
fi

Редактировать: я исправил строки в соответствии с комментариями ниже.

0 голосов
/ 13 мая 2019

Я предлагаю это:

for f in "$(find $indir -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty)"; 
do 
  cp "$f" /some/targetdir; 
done

find быстрее, чем wc, чтобы проверить нулевой размер.

Я считаю его более читабельным, чем другое решение, субъективно.

Однако цикл for необязателен, так как:

find "$indir" -type f -name 'NVDI_500m_mean_distance_*_40PC' -not -empty |\
    xargs -I % cp % /some/targetdir/%

Всегда "заключать в кавычки" строки пути, поскольку большинство утилит оболочки ломаются, когда в строке есть неэкранированные символы оболочки или пробелы. Есть редко веские причины использовать строки без кавычек.

...