기본적으로 나는 이것을 하고 싶다:
mv /path/sourcefolder/* /path/destinationfolder/
하지만 90일보다 오래된 파일에만 해당됩니다.
MV는 필요한 경우 소스 경로의 하위 디렉터리 구조를 복사해야 합니다. MV는 90일이 지난 파일만 이동합니다.
그런 일은 작동하지 않습니다. 소스 하위 디렉터리 구조에 관계없이 모든 파일을 동일한 대상 폴더에 배치합니다.
find -type f -mtime +600 -exec mv '{}' /storage/9016-4EF8/WhatsApp/Media/ \;
답변1
를 사용하면 zsh
다음을 수행할 수 있습니다.
dest=/storage/9016-4EF8/WhatsApp/Media
cd /path/sourcefolder &&
for f (**/*(ND.m+89)) {
mkdir -p -- $dest/$f:h &&
mv -- $f $dest/$f
}
zmodload zsh/files
.mv
mkdir
또는 POSIX적으로:
cd /path/sourcefolder &&
dest=/storage/9016-4EF8/WhatsApp/Media find . -type f -mtime +89 -exec sh -c '
for f do
mkdir -p -- "$dest/${f%/*}" &&
mv -- "$f" "$dest/$f"
done' sh {} +
(참고: -mtime -89
89일 미만의 파일, -mtime 89
89~90일 사이의 파일, 90일 이상(또는 적어도 시작 시 -mtime +89
)의 파일을 선택하려면 여기에서 참고하세요.find
하늘해당 간격 내에 DST 시계 변경 여부에 관계없이 24시간 기간을 나타냅니다)).
어떤 경우든 mv
외부 미디어에 원본 파일을 복사할 때 원본 파일의 속성 대부분을 보존하려고 시도하는 동안 디렉터리 자체는 기본 소유권, 권한 및 속성을 가진 새 디렉터리로 생성됩니다( 문제가 될 가능성이 낮음) 귀하의 경우 Unix와 유사한 파일 시스템에서도 대상 폴더의 소리가 좋지 않습니다.
답변2
이 스크립트는 공백이 포함된 디렉터리/파일 이름에 대해 작동합니다. 여기서 일어나는 일은 명령을 실행하는 대신 명령을 인쇄한다는 것입니다. 실제로 명령을 실행하려면 코드에서 "echo"라는 단어를 두 위치 모두에서 제거하십시오.
Oneliner는 쉘(/bin/sh 또는 /bin/bash)을 사용하여 다음을 실행합니다.
DAYS=89; SOURCE="/path/sourcefolder/"; DEST="/path/destinationfolder/"; find "${SOURCE}" -mtime +${DAYS}|while read -r S; do D=$(echo "${S}"|sed "s#^${SOURCE}#${DEST}#g"); DD=$(dirname "${D}"); [ -d "${DD}" ] || echo mkdir -p \"${DD}\"; echo mv -f \"${S}\" \"${D}\"; done
설명하다:
# define number of days
DAYS=89;
# source directory
SOURCE="/path/sourcefolder/";
# destination directory
DEST="/path/destinationfolder/";
# take one by one all files from source directory
find "${SOURCE}" -mtime +${DAYS}|while read -r S; do
# create destination file path, based on source file path
D=$(echo "${S}"|sed "s#^${SOURCE}#${DEST}#g");
# find directory, where distination file should be placed
DD=$(dirname "${D}");
# if destination directory does not exist, create it
[ -d "${DD}" ] || echo mkdir -p \"${DD}\";
# move source file to destination
echo mv -f \"${S}\" \"${D}\";
done