Перевод результата подсчета файлов в переменную на основе команды unix «Find»

#linux #unix

#linux #unix

Вопрос:

Я использую следующую команду, чтобы получить результат подсчета файлов в переменную на основе команды unix «Find»: Критерии: количество файлов, созданных сегодня, с расширением «tab» и размером больше 0 Команда:

 num_files_nz=$(find $src_file_path -type f -mtime 0 -name "*.tab" -size  0c | wc -l)

echo "Count of non-0KB files=${num_files_nz}"
  

Эта команда работает нормально и возвращает количество «4» из командной строки (что правильно), но когда я использую ту же команду и путь к каталогу в сценарии оболочки, количество возвращается как «0».
Я попытался ввести каталог как in $src_file_path , а затем использовать «.» вместо ввода $src_file_path непосредственно в команду.
Я заключил все $(find ...) выражение в кавычки.
Но ничего не работает, он всегда возвращает 0 при использовании в сценарии оболочки.

Я был бы очень признателен, если кто-нибудь может помочь мне решить эту проблему.

Ниже приведен сценарий:

 #export path=/newitest/u01/app/itestcomn/admin/out/itest_eca1db11
#!/usr/bin/ --
request_id=$5
hostname=$6
username=$7
password=$8
email_to=${9}
org_code=${10}
dest_file_path="/$org_code"
RETCODE=0
echo "Main Request ID=$request_id"
echo "hostname=$hostname"
echo "username=$username"
echo "password=$password"
echo "email_to=$email_to"
echo "dest_file_path=$dest_file_path"
echo "org_code=$org_code"
cd $XXKE_TOP/../../keedi/11.5.0/outbound/"$org_code"
src_file_path="$(pwd)"
ls -l
echo "src_file_path=$src_file_path"
#number of files created today, with extension "tab" and size greater than 0
num_files_nz=$(find $src_file_path -type f -mtime 0 -name "*.tab" -size  0c | wc -l)
echo "Count of non-0KB files=${num_files_nz}"

#number of files created today, with name "StockTransfer_Oracle.tab" and size equals 0 
num_files_z=$(find $src_file_path -type f -mtime 0 -name "StockTransfer_Oracle.tab" -size 0c | wc -l)
echo "Count of 0KB files=${num_files_z}"

#total file count
num_tot_files=$(expr "$num_files_nz"   "$num_files_z")
echo "Total file count=${num_tot_files}"

if [ "$num_tot_files" -eq 14 ];
then
  echo "FTP Start"
  ftp -v -n $hostname <<EOF
  quote USER $username
  quote PASS $password
  cd /
  cd $dest_file_path
  pwd
  prompt off
  mput *.tab
  bye
EOF

else
  echo "ERROR GENERATING EXTRACTS"
  #Extract files with zero size other than the file "StockTransfer_Oracle.tab"
  err_files="$(find $src_file_path -type f -mtime 0 -name "*.tab" ! -name "StockTransfer_Oracle.tab" -size 0c)"
  echo "Error Ertracts"
  echo "${err_files}"
  msg_body="Following $org_code extracts were not completely generated:nn$err_files"
  echo ${msg_body} | mailx -s "ERROR: Extract File Generation"  ${email_to}
fi
  

Я вхожу в исходный каталог с помощью команды «cd» в строке 18, я использую тот же путь, что и значение в переменной $ src_file_path, и тот же путь должен быть доступен, когда я использую «.» в инструкции find.
Я изучу абсолютный путь, но, пожалуйста, пришлите несколько примеров, если это возможно, и любые другие предложения, которые могут помочь заставить сценарий оболочки работать.

Также, когда я создаю файл «.sh» и выполняю его из командной строки, команда find работает и возвращает правильное количество, но когда я преобразую его в «.prog» и запускаю его с помощью параллельной программы, команда возвращает нулевое количество

Спасибо Anir

Комментарии:

1. Здравствуйте. Я пробовал, как вы описали. Но я получаю правильный ответ (для меня это: количество файлов, отличных от 0 КБ = 1), независимо от того, запускаю ли я его в командной строке или в файле сценария оболочки. Итак, я хочу знать ваш точный сценарий оболочки.

2. И в каком каталоге вы запускаете файл сценария оболочки, когда используете «.» вместо ввода $src_file_path ? А вы пробовали использовать абсолютный путь?

3. Если у вас src_file_path есть пробелы, вы должны заключить его в кавычки, т.е. $(find "$src_file_path" ...)

Ответ №1:

Это не сработает.

cd $ XXKE_TOP/../../keedi/11.5.0/outbound/»$org_code» src_file_path=»$ (pwd)»

Вместо этого я предлагаю вам указать, как показано ниже, и это должно быть исправлено:

экспорт src_file_path=$XXKE_TOP/../../keedi/11.5.0/исходящий/»$org_code»