История изменений
Исправление Kroz, (текущая версия) :
Я б это сделал как-то так.
#!/bin/bash
ACCESS_ERRORS_FILE_LOG='access_errors_files.log'
ACCESS_ERRORS_DIR_LOG='access_errors_dirs.log'
function LOG()
{
echo "$*" > /dev/null # Turn logs on or off
}
: > "$ACCESS_ERRORS_FILE_LOG"
: > "$ACCESS_ERRORS_DIR_LOG"
while read FILEPATH; do
FILE_FULLNAME="$(basename $FILEPATH)"
FILE_NAME="${FILE_FULLNAME%.*}"
FILE_EXT="${FILE_FULLNAME##*.}"
LOG "FILE: $FILEPATH -> $FILE_NAME . $FILE_EXT"
if [[ ! "$FILE_NAME" =~ ^.*r$ ]]; then # Check file name criteria
LOG " does not match criteria"
continue
fi
if [[ ! -r "$FILEPATH" ]]; then # Check file access
echo "Cannot read file: $FILEPATH" >> "$ACCESS_ERRORS_FILE_LOG"
continue
fi
echo "=== $FILE_FULLNAME"
cat "$FILE_FULLNAME" | sed '=' | sed 'N;s/\n/:\t/' | sort -t$'\t' -k2 # Show file, add line numbers, sort lines
echo
done <<< "$( find . -maxdepth 4 -type f 2> "$ACCESS_ERRORS_DIR_LOG" ) " # Define 1) start dir 2) max depth 3) access errors file (for directories)
Может не корректно работать если в файле будут строки с табуляциями. И да, я люблю называть все переменные большими буквами, хоть это и не best practice.
Исправление Kroz, :
Я б это сделал как-то так.
#!/bin/bash
ACCESS_ERRORS_FILE_LOG='access_errors_files.log'
ACCESS_ERRORS_DIR_LOG='access_errors_dirs.log'
function LOG()
{
echo "$*" > /dev/null # Turn logs on or off
}
: > "$ACCESS_ERRORS_FILE_LOG"
: > "$ACCESS_ERRORS_DIR_LOG"
while read FILEPATH; do
FILE_FULLNAME="$(basename $FILEPATH)"
FILE_NAME="${FILE_FULLNAME%.*}"
FILE_EXT="${FILE_FULLNAME##*.}"
LOG "FILE: $FILEPATH -> $FILE_NAME . $FILE_EXT"
if [[ ! "$FILE_NAME" =~ ^.*r$ ]]; then # Check file name criteria
LOG " does not match criteria"
continue
fi
if [[ ! -r "$FILEPATH" ]]; then # Check file access
echo "Cannot read file: $FILEPATH" >> "$ACCESS_ERRORS_FILE_LOG"
continue
fi
echo "=== $FILE_FULLNAME"
cat "$FILE_FULLNAME" | sed '=' | sed 'N;s/\n/:\t/' | sort -t$'\t' -k2 # Show file, add line numbers, sort lines
echo
done <<< "$( find . -maxdepth 4 -type f 2> "$ACCESS_ERRORS_DIR_LOG" ) " # Define 1) start dir 2) max depth 3) access errors file (for directories)
Может не корректно работать если в файле будут строки с табуляциями. И да, я люблю называть все переменные большимибуквами, хоть это и не best practice.
Исходная версия Kroz, :
Я б это сделал как-то так.
#!/bin/bash
ACCESS_ERRORS_FILE_LOG='access_errors_files.log'
ACCESS_ERRORS_DIR_LOG='access_errors_dirs.log'
function LOG()
{
echo "$*" > /dev/null # Turn logs on or off
}
: > "$ACCESS_ERRORS_FILE_LOG"
: > "$ACCESS_ERRORS_DIR_LOG"
while read FILEPATH; do
FILE_FULLNAME="$(basename $FILEPATH)"
FILE_NAME="${FILE_FULLNAME%.*}"
FILE_EXT="${FILE_FULLNAME##*.}"
LOG "FILE: $FILEPATH -> $FILE_NAME . $FILE_EXT"
if [[ ! "$FILE_NAME" =~ ^.*r$ ]]; then # Check file name criteria
LOG " does not match criteria"
continue
fi
if [[ ! -r "$FILEPATH" ]]; then # Check file access
echo "Cannot read file: $FILEPATH" >> "$ACCESS_ERRORS_FILE_LOG"
continue
fi
echo "=== $FILE_FULLNAME"
cat "$FILE_FULLNAME" | sed '=' | sed 'N;s/\n/:\t/' | sort -t$'\t' -k2 # Show file, add line numbers, sort lines
# cat "$FILE_FULLNAME" | sed '=' | sed 'N;s/\n/:\t/'
echo
done <<< "$( find . -maxdepth 4 -type f 2> "$ACCESS_ERRORS_DIR_LOG" ) " # Define 1) start dir 2) max depth 3) access errors file (for directories)
Может не корректно работать если в файле будут строки с табуляциями. И да, я люблю называть все переменные большимибуквами, хоть это и не best practice.