디렉터리, 하위 디렉터리 및 파일의 mtime을 반복적으로 변경하기 위해 사용자 입력이 필요한 Bash 스크립트 atime linux

디렉터리, 하위 디렉터리 및 파일의 mtime을 반복적으로 변경하기 위해 사용자 입력이 필요한 Bash 스크립트 atime linux

GNU bash 버전 4.3.11(1)-릴리스(x86_64-pc-linux-gnu) 사용

저는 bash 스크립팅을 처음 접했고 shebang 외에는 어디서부터 시작해야 할지 모르겠습니다 #!. 다음 명령.

  • touch -a -m -t 201501010000.00 somefile.txt, "somefile.txt"의 액세스 시간과 수정 시간을 수정합니다.
  • Bash 스크립트를 얻을 수 있는 방법이 있나요?

    1. "/mnt/harddrive/BASE/" 디렉터리에서 작동합니다.

    2. 사용자에게 입력하라는 메시지를 표시합니다. "somefilename.txt" 또는 "somedirectoryname".

    3. 사용자에게 입력하라는 메시지를 표시합니다. "날짜시간시리즈". 현재 타임스탬프를 사용하지 말고 대신 -t및 옵션을 사용하여 -d시간/날짜를 명시적으로 지정하세요 .
    4. 재귀적으로 변경/수정합니다. BASE 디렉토리의 "하위 디렉토리"에 있는 "atime", "mtime" 및 해당 "하위 디렉토리"에 있는 "files". 그리고
    5. 변경/수정. "somefilename.txt"의 "atime"과 "mtime"은 "/mnt/hardrive/BASE/" 디렉터리에 있습니다.

    선택 사항 6. "somefilename" 및 "somedirectoryname" 파일 확장자 앞에 "mtime"을 추가합니다. 즉, "somefilename-01-01-2015.txt" 또는 "somedirectoryname-01-01-2015"입니다. 사용자에게 묻습니다. "예/아니요"가 계속되면 "somefilename.txt" "예/아니요"에 "mtime"을 추가하시겠습니까?

    1. stat디렉터리와 파일을 콘솔이나 "/tmp" 디렉터리의 텍스트 파일로 출력하고 표시한 다음 cat"sometmpfile"을 삭제합니다 rm -r.

답변1

다음과 같이 보일 수 있습니다:

#!/bin/bash

# 1. change directory
cd "/mnt/harddrive/BASE/" 

# 2. prompt for name of file or directory
echo -n "file or directory name: "
# ...  and read it
read HANDLE

# 2. b - check if it exists and is readable
if [ ! -r "$HANDLE" ] 
then
    echo "$HANDLE is not readable";
    # if not, exit with an exit code != 0
    exit 2;
fi

# 3. prompt for datetime
echo -n "datetime of file/directory: "
# ... and read it
read TIMESTAMP

# 4. set datetime for HANDLE (file or directory + files) 
find $HANDLE | xargs touch -a -m -t "$TIMESTAMP"

# 5. ask, if the name should be changed
echo -n "change name of file by appending mtime to the name (y/n)?: "
# ... and read it
read YES_NO
if [ "$YES_NO" == "y" ]
then
    # get yyyy-mm-dd of modification time 
    SUFFIX_TS=$(stat -c "%y" $HANDLE  | cut -f 1 -d" ")
    # rename, supposed, the suffix is always .txt
    mv $HANDLE $(basename $HANDLE txt)-$SUFFIX_TS.txt
    # let HANDLE hold the name for further processing
    HANDLE=$HANDLE-$TIMESTAMP.$SUFFIX
fi

# 7. stat to console
stat $HANDLE

이는 테스트의 일부일 뿐이지만 시작이 되어야 합니다.

여기서 무슨 일이 일어나고 있는지 이해하려면 echo, read, test, cut, touch, find, xargs 명령을 찾아야 합니다.

또한 매개변수 대체, 명령 대체 및 파이프와 같은 몇 가지 기본 bash 개념을 알아야 합니다.

관련 정보