web-dev-qa-db-ja.com

Linuxでの変更日に基づいたファイルのコピー

それは重複した質問かもしれませんが、私はこの解決策を見つけることができませんでした私はあるディレクトリから別のディレクトリに最後の3ヶ月のファイルをコピーしたいのですが、次のコマンドを使用してファイルを一覧表示することしかできませんでした。

find . -mtime -90 -ls

-mtimeを使用してファイルをコピーする方法が本当にわかりません。私はLinuxが初めてなので、助けてください。

20
Kalai

findには-execオプションを使用します。

find . -mtime -90 -exec cp {} targetdir \;

-execは、findによって返されたすべての結果を指定されたディレクトリ(上記の例ではtargetdir)にコピーします。

32
devnull

特定の日数に戻る以外に、正確な日付と時刻を選択することもできます

cp  `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER

上記は、2016年9月18日20:05:00以降に作成されたディレクトリ内のすべてのファイルをFOLDERにコピーします(今日の3か月前:)

Findコマンドのシンボルには注意してください、これはこれではありません: 'これ、バックティック: `日付選択はこれです:'

名前にスペース、改行、タブ、またはワイルドカードを含むファイルがある場合は、StéphaneChazelasのソリューションのいずれかを使用できます。1つ目はGNU用、2つ目はGNUまたはいくつかのBSD用です:

find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "$@" FOLDER' sh {} +
5
FatihSarigol

次のコマンドを使用します。

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
4
Mise

最初にファイルのリストを一時的に保存し、ループを使用すると思います。

find . -mtime -90 -ls >/tmp/copy.todo.txt

リストが大きすぎない場合は、リストを読むことができます。

for f in `cat /tmp/copy.todo.txt`;
do echo $f;
done

注:cat ...を囲む引用符は逆引用符で、多くの場合キーボードの左上隅にあります

その後、エコーコマンドをコピーコマンドに置き換えることができます。

for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done
3
Paul

例:2017年9月8日を選択

ls -l
 -rw-rw-rw-    1    root     system          943   Aug   09   02:59  File

for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
    do
        mv $j $Destination;
    done
1