/home/user/files 폴더에 임의의 숫자가 포함된 파일이 있습니다(4일마다 새 파일이 생성됩니다). 예를 들어:
john20
john25
john40
tom12
tom32
simon2
simon8
simon53
마지막으로 수정된 파일(최신 파일)을 가져와서 파일 이름에 해당 번호가 없는 다른 위치(/home/user/fixed)에 복사하고 싶습니다.
find 명령을 사용하여 필터링하고 복사하는 방법을 알고 있지만, 이 숫자 없이 이 숫자를 모두 복사하는 방법은 모르겠습니다.
find $files_are_here -maxdepth 1 -mtime -2 -type f -exec cp {} $new_path \;
그러면 지난 2일 동안 수정된 모든 파일이 새 경로로 복사되지만 원래 이름은 유지됩니다. 나는:
john40
tom32
simon53
하지만 그 폴더에는 John, Tom, Simon만 필요합니다. 따라서 스크립트를 다시 실행하면 최신 스크립트로 대체됩니다.
답변1
다음은 자명한 설명이기를 바랍니다.
find -maxdepth 1 -mtime -2 -type f -exec bash -c 'name=${1##*/}; cp "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
답변2
find -mtime -2 \
-maxdepth 1 \
\! -type d \
\( -name 'simon*' \
-o -name 'tom*' \
-o -name 'john*' \
\) | tar -T - \
--xform='s/[0-9]*$//' \
-cf - | tar -C ./path/to/destination --keep-newer-files -xf -
내 생각에는 이것이 가능할 것 같다. 나에게는 효과가 있는 것 같다. simon
, tom
및 파일을 이틀마다 덮어쓰도록 되어 있는 한 john
, 이것이 효과가 있다고 생각합니다. 그게 아니면 아주 가깝습니다. 아, 하지만 GNU가 필요합니다 tar
. 아마도 find
GNU도 필요할 것입니다. 후자에 대해서는 잘 모르겠습니다. 나는 이것들을 너무 자세히 다루지 않았습니다. 왜냐하면 대부분은 여러분 자신의 선택이기 때문입니다.